Start by defining the individual type structures and write tests, instead of immediately hooking these up into the compiler.
Remove memoizing from the type database as this won't translate well to Inko (it's also not really necessary).
Get rid of
Type::Boolean(somehow) in favour of just using
Type::Nilin favour of using
std::marker::Optionaltrait. This requires that types have access to the type database so they can look up types in other modules.
Type::TypeParameterTableinto two separate structures: one for storing type parameters and one for mapping these to their instances
Spec out how type compatibility with regular objects is actually supposed to work
Type::Dynamicwhen producing errors
Don't produce errors when sending messages to
Type::Errorto prevent cascading type errors
Determine how we should initialise generic types
Stop using the horrible
Change type parameter syntax from
!(X, Y, Z)to
[X, Y, Z]. This is easier to type (on a QWERTY keyboard it doesn't require the use of shift).