shithub: MicroHs

ref: e7a6778eb34a054a8a2242cb0b63e28296dc4d57
dir: /TODO/

View raw version
* Have compile return a Stats record of timing etc
* Implement deriving
* 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
  - Implement IOArray
  - Use IORef for STRef
* 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
* Unicode, i.e., UTF-8 IO
* Use pointer reversal, might be slower
  - In GC mark pass
  - In evaluator
* Fix bug uncovered by Data.Type.Equality
* Stratify types/kinds/sorts
  - Do kind variables this way 'data forall (k:Kind) . T (a::k) = C'