Skip to content

frank-lang/frank

Repository files navigation

Frank

An implementation of the Frank programming language described in the POPL 2017 paper, ``Do be do be do'' by Sam Lindley, Conor McBride, and Craig McLaughlin. See the (revised) paper at: https://arxiv.org/abs/1611.09259

Further enhancements are described by Lukas Convent in his MSc thesis of 2017: http://lukas.convnet.de/proj/master/index.html

Installation procedure

The easiest way to install frank is to use stack (external website, github):

stack setup

The above command will setup a sandboxed GHC system with the required dependencies for the project.

stack install

The above command builds the project locally (./.stack-work/...) and then installs the executable frank to the local bin path (executing stack path --local-bin will display the path).

Running a Frank program

To run a frank program foo.fk:

frank foo.fk

By default the entry point is main. Alternative entry points can be selected using the --entry-point option.

Some example frank programs can be found in examples. They should each be invoked with --entry-point tXX for an appropriate number XX. See the source code for details.

To specify a search path for source files use -I or --include=INC.

Optionally a shonky file can be output with the --output-shonky option.

Further debug options are

  • --debug-output: Enable all debugging facilities
  • --debug-verbose: Enable verbose variable names etc. on output
  • --debug-tc: Enable output of type-checking logs

Limitations with respect to the paper

  • Only top-level mutually recursive computation bindings are supported

  • Coverage checking is not implemented