This repository accompanies the Haskell'24 paper Making a Curry Interpreter using Effects and Handlers.
The most recent code might differ from the version shown in the paper. You can check out
- 4db98c2 for the original interpreter
- 1421632 for an extended version featuring unification
- 90dfb99 for 'fusion all the way'
stack install
Run
efci [filename]
from the directory where filename.curry
is located. If efci
is called without an argument, only the Prelude
module is loaded.
If you have rlwrap
installed, use rlwrap efci [filename]
to get an input history for the interpreter.
- Without an option, the input is interpreted as a Curry expression within the loaded file.
:q
exits interpreter.:fcy
toggles printing of themain
expression generated from the input.
stack test effective-curry-interpreter
stack bench effective-curry-interpreter
- Ambiguous types are not defaulted. For example,
1 + 2
needs to be annotated as1 + 2 :: Int
. - Not all external functions are implemented.