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'
git clone https://github.com/nbun/efci
cd efci
git submodules pull --init
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.
:qexits interpreter.:orotates between the available interpretation modes:timetoggles printing time elapsed during interpretation:fcytoggles printing of themainexpression generated from the input.
stack test effective-curry-interpreter
stack bench effective-curry-interpreter
- Ambiguous types are not defaulted. For example,
1 + 2needs to be annotated as1 + 2 :: Int. - Not all external functions are implemented.