ref: b0d55ed706f933a21c56c924b3da0f100f82186a
dir: /TODO/
* Put on hackage
* Have compile return a Stats record of timing etc
* Implement deriving
* Add the possibility to save a compiler cache in a file
- Add SHA checksumming to the C code
- Use filename as the cache lookup key and SHA for validation
* make the runtime system catch ^C and stop execution
* use pointer stack during GC instead of recursion.
* whith 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
- f x y = ... f x e ...
transforms to
f x = let f' y = ... f' e ...
this will specialize recursive functions
(and make more efficient 'map' etc)
* Type checker improvements:
- allow generalization for local bindings
- use subsumption (like if) in the arms of alternatives
- allow missing top level signatures (and generalize)
- instead of skolemization, use regular variables, making sure they are unique
- allow existential quantification
# works partially, but not constraint solving doesn't happen in all the right places
- don't require kind signatures in forall
* Try Oleg's abstraction algorithm
* Implement IORef
- The IORef will need GC support
* Redo type synonym expansion
- Only non-injective synonyms necessitate 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
* Implement fundeps
* Split eval.c
- Partially done
- Complete 32 bit support
* Removing [] from prim table
* Parser cannot handle
x :+ y == x' :+ y'
probably needs total merge of pattern&expression with validation in type checker
* Parse prefix negation
* Faster compression
* Fix polymorphic pattern literals
- Probably by implementing view patterns
* Make float support work for 32 and 64 bit words
Bugs