[Haskell-cafe] C++ Haskell interpreter with GADTs + Type Families + Rank-n types

Benjamin Redelings benjamin.redelings at gmail.com
Fri Jan 20 01:40:57 UTC 2023


Hi all,

I don't want to oversell this, but in case anyone is interested, I've 
been working on a Haskell interpreter that is written in C++.  This 
isn't intended to compete with GHC.  It doesn't generate machine code, 
and it is not fast.

However, I had a reason to try and implement Haskell typechecking in 
C++.  So if anyone is interested in how to write their own Haskell 
compiler, then this might possibly be of interest. Otherwise, probably not.

So far I have:

1. Parser

2. Renamer - hacky.  Infix handling is a separate pass.

3. Typechecker - standard constraints + rank n types + GADTS + type 
families.  But no newtypes and no coercions.

4. Desugarer - the desugarer generates a language w/o type-level lambdas 
or coercions.

5. Optimizer - inlining, let-floating, case-of-case, etc.  No 
SpecConstr.  No Rules.

6. Translation to de-Bruijn notation prior to execution (See Sestoft 
1997, "Deriving a lazy abstract machine")

7. Interpreter - a special-purpose dependency-tracking interpreter.

The revelant code is here: 
https://github.com/bredelings/BAli-Phy/tree/master/src/computation

After compiling the executable, you would run use it to run a Haskell 
program like this:

     bali-phy --run-module Main.hs

Tests are in: 
https://github.com/bredelings/BAli-Phy/tree/master/tests/haskell

-BenRI



More information about the Haskell-Cafe mailing list