Another implementation of Frank.
Haskell Python
Permalink
Failed to load latest commit information.
examples Use unification in applications. Jan 22, 2017
shonky Added evaluation flag for executing Frank uses (i.e. applications). Jan 12, 2017
tests Use unification in applications. Jan 22, 2017
.ghci change permissions on .ghci Nov 2, 2016
.gitignore Ignore .stack-work Nov 16, 2016
BwdFwd.hs Started implementation of typechecking and unification. Sep 30, 2016
Compile.hs pattern matching for lists Jan 14, 2017
CompileTest.hs Added code eg from section 6 of paper and parsing support for it. Sep 26, 2016
DesugarSyntax.hs pattern matching for lists Jan 14, 2017
ExpectedTestOutput.hs Add support for effect-parameterised interfaces. Jan 11, 2017
Frank.hs Added evaluation flag for executing Frank uses (i.e. applications). Jan 12, 2017
FreshNames.hs Started implementation of typechecking and unification. Sep 30, 2016
Parser.hs disallow gibberish at the end of source files... may fix the spurious Jan 22, 2017
README.md Update the parser to handle empty abilities and ability variables. Jan 12, 2017
RefineSyntax.hs pattern matching for lists Jan 14, 2017
Run.hs Added run file for executing the main function of a Shonky file. Nov 2, 2016
Syntax.hs pattern matching for lists Jan 14, 2017
TestingIdeas Dummy test harness summary output (testing layout/decorations). Nov 29, 2016
TypeCheck.hs fresh peg with a specified ability Jan 22, 2017
TypeCheckCommon.hs Add support for effect-parameterised interfaces. Jan 11, 2017
TypeCheckTest.hs Refine ability arguments to datatypes in case where left unspecified. Nov 18, 2016
Unification.hs Fixed unification of an effect-parametric datatype with itself. Jan 18, 2017
frank.cabal Removed non-existent directory from cabal file. Jan 11, 2017
stack.yaml Stack build file for Frank Nov 16, 2016
testharness.py Added verbose regression failure summary. (Test Harness). Dec 6, 2016

README.md

frankjnr

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

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.

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

Limitations with respect to the paper

  • Only top-level mutually recursive computation bindings are supported

  • Coverage checking is not implemented