Having built a structural/inferred type system myself(and then abandoning the project), it's amazing how the core implementation came out almost identically, just with different naming conventions. I didn't use many references for my own thing and just invented as I went along. Yet the graph concept and subtype matrix both came up.