The Pony Farm
This is where we record possible extensions to the language, or other related projects. These are kept out of the ticket database because either: we don't really know what we want yet, or we don't know how to do it. These extensions involve significant research and/or semantics work.
Fuzz testing DDC
At one time we had a 'churn' program that generated random lambda terms and fed them into the type inferencer to see what would happen. This exposed several bugs in the type inferencer, and it would be useful to have something like this again. The old code was called 'churn', and there are remnants in the 'tools' director.
Redo the exception mechanism
The exception mechanism in the source language is based around try/catch, and doesn't have a proper semantics. We should probably just use the GHC approach where the 'error' function creates an exceptional value instead of causing a side effect.
- If we were going to treat exceptions as side effects, then perhaps we could do something like in Benton and Buchlovsky's "Semantics of an effect analysis for exceptions" paper.
Type level natural numbers
For making use of MMX/SSE/SSE2 instructions it would be nice to have type level natural numbers so that static information about array sizes can be maintained all the way through to the code generator. With this information it should be particularly easy to make the LLVM backend do something sensible with this information.
- If we just wanted natural numbers at the type level, without constrains on them then this would be easy to add. We'd just add add them as type constructors, with a new kind 'nat'. Adding constraints would be more work.
Add monadic do expressions
We can't reuse the source-level 'do' syntax because of ambiguity in the following program:
do Just 1 Nothing Just 2
If the do was monadic then this would return Nothing, otherwise Just 2.
Perhaps we should use a different keyword, maybe 'mdo', to invoke monadic desugaring.