WebHome
-
UHC
-
EHC
-
Documentation
-
Features & Status
-
EH examples
-
Feedback
-
News
-
FAQ
Related
-
Ruler
-
Shuffle
-
uulib & uuagc
Old Stuff
-
Previous WebHome
-
AFP2004
Center
Master Program
Center
Home
Courses
People
Projects
Page
Edit Page
Rename Page
Attach File
Printable
Wiki Source
More ...
Web
Recent Changes
Notify Service
News
Page Index
Search
More ...
Wiki
About TWiki
Text Formatting
Registration
Change Password
Reset Password
Users
Groups
Log In
or
Register
Language Features
Ehc
%TOC% %RED%This page is left here as a todo list, but not further maintained%ENDCOLOR%. Last update of this page at %REVINFO{"$date"}%. The content of this page will partially move to the [[UhcUserDocumentation#LanguageImplementationStatus][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 [[FreqentlyAskedQuestions#Will_EH_syntax_support_feature_X][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|[[http://code.google.com/p/ehc/issues/detail?id=4&can=2&q=][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 [[http://www.swox.com/gmp/][GMP]])| |Float types|Y| |Exceptions|Y| |Threads|N| |Foreign function interface|Y/N| |GRIN based C backend with global optimizations|Y/N| |GRIN based [[http://www.llvm.org/][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 ([[http://www.hpl.hp.com/personal/Hans_Boehm/gc/][Boehm GC]], EHC gc in development)| ---++ Current work [on/after 9 Jan 2008] * [[Atze.WebHome][Atze Dijkstra]]: Haskell frontend (in general: make it Haskell), GRIN based C interpreter * [[Main.JeroenFokker][Jeroen Fokker]]: GRIN backend * Arie Middelkoop: Ruler system * John van Schie: [[http://www.llvm.org/][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?