- define extra-info as a separate macro whose input is the types
in the tycon
- extra-info in main tycon is just the name of the extra-info macro
- extra-info macro is expanded only when extra-info is requested
- naturally handles additional tyvar substs in the types
- breaks the recursion to avoid inf loops for recursive and mutually recursive
datatypes
- enables simplification of direct recursive datatypes
- no longer need subst-special
- performance is much improved (okasaki: ~1min, was ~4min)
- resolves#1
- define-type-constructor accepts arbitrary extra "info" that is stored
with the type
- get-extra-info extras this info
- define type stores extra info that is essentially a mu type
containing all variant info
- match must manually "unfold" this info, ie iso-recursive
- all tests passing
- mlish tests implements full nqueens example
- no explicit instantiation of polymorphic functions
- some polymorphic constructors require annotations when no inference possible
- a lone nil with no other information
- lambda params require annotations
- top lvl fns require full signature
- fomega2 is the same as fomega.rkt, except tyapp, tylam, and => are removed
- instead, #%app, \lam, and -> serve dual purpose at both term and type level