ref: 4e251c0eadcfb51c48483fcc9032d15ca333fa39
dir: /TODO/
* Have compile return a Stats record of timing etc
* make the runtime system catch ^C and stop execution
* with dictionaries we need two optimizations to get rid of them
- case d of (d1,d2) -> ... (d1,d2) ...
transforms to
case d of (d1,d2) -> ... d ...
this takes care of dictionary reconstruction
* Type checker improvements:
- allow generalization for local bindings
- use subsumption (like if) in the arms of alternatives
- instead of skolemization, use regular variables, making sure they are unique
- allow existential quantification
# check for escaping skolemized variables
* Try Oleg's abstraction algorithm
- Seems to be slower
* Redo type synonym expansion
- Do expansion during unification
* Redo handling of synonym and instance tables.
- These tables can persist during the compilation and only grow
* Implement two level tables for instances even in the tricky cases
* Handle tupled dictionaries better for recursive calls
* Removing [] from prim table
* Faster compression
* Use pointer reversal during marking, will be slower
* Fix bug uncovered by Data.Type.Equality
* mkQIdent
* Fix bug, line 629, TypeCheck.hs
* Get rid of evalstring()
- do everything in Haskell
- make a low level primError that takes a utf8 string
- get rid of noMatch and noDefault primitives
* Implement lazy matching
* Implement strict matching
* Change default 'default'?
* Implement TAB completion
* Better pretty print of Expr
* Move extra stuff from Data.List into its own module
* Allow top level pattern bindings
- Merge EBind and EDef
* Implement pattern synonyms
* Implement qualified constraints
* Add some package concept with a saved cache
* Export the right list functions
* Improve defaulting