Language Features
Ehc
This page is left here as a todo list, but not further maintained.
Last update of this page at 18 Apr 2010. The content of this page will partially move to the
status section of the ehc manual.
These (currently incomplete) tables relate to the latest revision on the Subversion trunk, at the time of writing.
Y means a feature is present, Y/N (or YN) means work on it is underway but it is half-finished, N means it is not present but it will be, n ditto but one can live without, NN means it is not present and most likely never will be. Please note
this answer in the FAQ.
Haskell 98 features
| Feature | .eh status | .hs status |
| Modules | NN | Y |
| Type synonyms | Y | Y |
| ...with arguments | Y (use type lambdas) | Y |
| Infix operators at type level | NN | N |
| Turning infix type constructors into prefix type constructors | Y (use type lambdas) | N |
| newtype declarations | N | Y |
| n+k patterns | NN | NN |
| Prelude | NN | Y (details are missing) |
| deriving construct | NN | Y |
| default construct | N | N |
| Irrefutable patterns | N | Y/N |
| Automatic binding groups detection | N (each let forms a DIY binding group) | Y |
| Strictness flags | N | n |
| Literate Haskell source format | NN | Y/N (only \begin{code}...\end{code}) |
| Infixity of operators influences parsing of expressions, as described in the report | NN | N |
Extended features
| Feature | .eh status | .hs status |
| Type lambdas (undocumented?) | Y | N |
| Automatic destructor deriving | buggy | N |
| Polymorphic kind inference | Y | Y |
| Explicit kinding | Y | Y/N |
| Explicit implicit parameters | Y | Y |
| Higher ranked polymorphism | Y | Y |
| Extensible records | YN | YN |
| Multiparameter type classes | Y | Y |
| Functional dependencies | N | N |
| Lexically scoped type variables | Y (introduced in patterns) | Y |
| Existential quantification | Y | Y |
| Partial type signatures (denotated with dots ...) | Y | Y/N |
Some combinations are not yet fully dealt with:
| Feature combination | .eh status | .hs status |
| Type classes & data types, eg data C a => D a = ... | YN | YN |
| Existential quantification over type classes, eg exists a.C a => a | YN | YN |
| Multiparameter type classes and quantification over subset of involved type variables | YN | YN |
Runtime system, backend, and use
The runtime system (RTS) is independent of the frontend, so the status is not split up into .eh and .hs status.
| Feature | status |
| Separate compilation | Y |
| Mutual recursive modules | N |
| Integer type | Y (via GMP) |
| Float types | Y |
| Exceptions | Y |
| Threads | N |
| Foreign function interface | Y/N |
| GRIN based C backend with global optimizations | Y/N |
| GRIN based LLVM backend with global optimizations | Y/N |
| GRIN based C interpreter, per module compilation | Y |
| GRIN based interpreter (written in Haskell, for testing purposes) | Y |
| Garbage collection | Y (Boehm GC, EHC gc in development) |
Current work [on/after 9 Jan 2008]
- Atze Dijkstra: Haskell frontend (in general: make it Haskell), GRIN based C interpreter
- Jeroen Fokker: GRIN backend
- Arie Middelkoop: Ruler system
- John van Schie: LLVM backend
Future work
Dynamic variables are partially implemented.
GADTs are not currently supported - but there is an experimental stage to support GADTs, which now needs updating to compile against the current codebase. Volunteers?