I’m preparing a list of dialect of ML that could be gives as an exercise to student for implementation. (The current plan is to give a typechecker for miniML, and they will implement an extension + interpreter).
I’m collecting a list of possible extensions of miniML that could fit here. I can’t remember all possible extensions, could you help?
(If you think that an extension is too complicated to implement, I wish you to mention it anyway).
- algebraic data types
- polymorphic variants (normal or set-theoretic)
- active patterns from F#
- lazyness a la Haskell
- type classes (minimal)
- objects with mutable fields and methods
- algebraic effects
- Looks complicated, but last year a pair of students managed to implement something workable
- typed effects (a la Leo White talk)
- looks complicated but a minimal implementation isn’t
- assignment, optional and default arguments
- equality types from SML + value restriction
- mini-Gallina (should not be too complicated but I didn’t try)
- a restriction to make algebraic types inductive
- a checker that functions are structurally recursive over an argument
- GADT (a suicidal task)
- delim/cc (another suicidal variant)
- AFAIR typing in OchaCaml is mysterious, because type of variables could change during execution