The code is available on github.
Note: JavaScript code generation (used to evaluate results) is not prefect yet and has rough edges.
| Feature | Type syntax | Term syntax |
|---|---|---|
| Basic Terms & Types | ||
| literals |
true,
false,
0,
1,
"",
"a",
etc.
|
(same syntax) |
| record | { x: int; y: bool } |
{ x = 0; y = false } |
| selection | t.a |
|
| polymorphism | forall 'a 'b 'c. T |
t |
| function | int -> int |
fun x -> x + 1 |
| application | F[A] |
f a |
| variable | 'a |
x |
| let binding | let x = s in t |
|
| pattern matching | match t with C1(a, b, c) -> t1 | C2 -> t2 |
|
| Top-Level Declarations | ||
| definition | def foo: T |
rec def foo = t or
def foo = t or just foo = t |
| algebraic data type |
datatype Option[A] = Some(A,) || None
|
Some(t), None
|
| type alias | type Foo[T] = |
|
| Miscellaneous | ||
| array of known size (tuple) | (), (int,), (int, int) etc. |
(), (0,), (0, 1) etc. |
| array of unknown size | Array[int] |
if ... then (0, 1) else (0, 1, 2) |
| type ascription | t: T |
|
| array indexing | a[i] |
|
| multi-parameter function | (int, int) -> int |
fun (x, y) -> x + y |
| multi-argument application | F[S, T] |
f(s, t) |
| tuple-parameter function | ((int, int)) -> int |
fun ((x, y)) -> x + y
|
| tuple-argument application | F[(S, T)] |
f((s, t)) |