SiFun

Interpreter for SiFun (Simple Functional) Language with three different type systems (supports Higher-Rank Polymorphism).

Currently supports Hindley–Milner type system (simply typed lambda calculus) and Hindley–Milner with Visible Type Application (similar to System F).

Under development is a Bidirectional Typechecking System which will support Higher-Rank Polymorphism without typed function and type application.

Installation

You can clone this repository using:

git clone git@github.com:kkd26/SiFun.git
cd SiFun
opam install .

or use the official opam release using:

opam install sifun

Usage

There are two ways to interact with the interpreter:

  1. SiFun REPL (Read–eval–print loop) - interactive console

    sifuni
  2. SiFun Interpreter - run from file

    sifun <filename>

SiFun Language syntax

The basic language supports (similar to Hindley–Milner type system):

The additional features are (similar to System F):

Note that ; separates blocks of code and ;; sends EOF, so stops execution.

You can check ./examples for more information about the syntax and semantics.