- 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)
- lambda now supports (implicit) polymorphic type annotations
- (unrelated to this commit) many tests seem to be failing due to a
slight change in err msg
- datatype constructors use same mechanisms as #%app
- eliminates duplication of inference and instantiation code
- #%app's handling of expected type is no longer separate from unification
of argument types
- eliminates redundant expansions
- speeds up tests ~10-20sec
- fn args are still possibly double-expanded
- compiles to racket match patterns (but still typechecks)
- supports nested patterns
- no exhastiveness checking
- no parens required for root pattern
(except for comma tup stx)
- support _ else case
- always no parens for 0-arity constructors
- both user-defined and built-in (like nil)
- alternative :: cons stx
- alternative comma --- (x,y,z) --- tuple stx
- requires at least 1 comma to detect
- see examples in match2.mlish
- define separate ->/test constructor that computes tyvars
and -> does not because it may be nested
(see "try" fn in alex.mlish)
- add alex.mlish tests
- other mlish tests still broken --- need to use ->/text
- fix bug where recursive tyvar did not have #%type tag
- records
- optional field names in type definitions
- reuse prefixes by default
- list fns
- provide explicit inst (need it for ho poly fns)
- if now allows non-false instead of bool
- small inference fixes
- add rw ocaml tests, ch6, up to "polymorphic variants"