The full, source code is available here.
TOP LEVEL DEFINITIONS
let x = e (let)
let (op) = e (definition of an infix operator op)
let x a ... a = e (let function)
atom id (constant and atomic type definition)
type Id = t and Id = t ... (recursive types definition)
ARGUMENTS
a ::= x (argument)
(x:t) (explicitly typed argument)
EXPRESSIONS
e ::= fun a ... a . e (function)
fun (t) x ... x -> e (explicitly typed function)
let x = e in e (let)
let x a ... a = e in e (let function)
<t> ("magic" constant of type t)
if e is t then e else e (typecase)
e e (application)
e op e (infix operator)
(e, e) (pair)
fst e (left projection)
snd e (right projection)
[e;...; e] (list)
() (unit)
"..." (string constant)
true ([true] Boolean constant)
false ([false] Boolean constant)
n (numeric constant)
id (user-defined constant)
x (variable)
TYPES
t ::= Bool (booleans)
Int (integers)
String (strings)
True (singleton [true])
False (singleton [false])
n (singleton [integers])
"..." (singleton [strings])
Unit (unit)
[t*] (lists of t)
n--n (interval of integers)
Id (user-defined type)
t->t (functions)
(t,t) (products)
t|t (union)
t&t (intersection)
t\t (difference)
~t (negation)
Empty (empty type)
Any (top type)