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)