Well, here’s version 0.2.9. This includes numerous bug fixes, and several major feature updates:
- Support for recursive algebraic datatypes
- Improved support for type testing, particularly of recursive types
- Syntax of function declarations has changed slightly to use
ensures. See this post for more on why.
However, there remains a long list of outstanding issues:
- Compile-time checking of recursive constrained types is a problem in some cases. See this post for more.
- Type inference doesn’t work in all cases either.
- Boolean lists remain a problem.
At this stage, I am faced with some difficult choices. The current design is getting overly complex and, frankly, I don’t believe it will go the distance. A new design is really needed that will dramatically simplify many aspects of the process. My current thinking on this is to move towards a simplified [[intermediate language]], similar in some ways to [[Java bytecode]]. The advantage of this is that it would significantly reduce the number of cases that need to be processed; it would also provide a nice interface between the front-end and the back-end, helping to separate them and improve overall modularity.