// multiple expressions
NUM_LIT PLUS NUM_LIT SEMICOLON IF TRUE THEN LBRACE NUM_LIT PLUS NUM_LIT SEMICOLON RBRACE ELSE LBRACE NUM_LIT SEMICOLON RBRACE SEMICOLON

// if-then-else expression
IF TRUE THEN LBRACE NUM_LIT PLUS NUM_LIT SEMICOLON RBRACE ELSE LBRACE NUM_LIT SEMICOLON RBRACE SEMICOLON

// if-the-else single line
IF TRUE THEN NUM_LIT PLUS NUM_LIT ELSE NUM_LIT SEMICOLON

// function definition
VAL ID ASSIGN LAMBDA LPAREN RPAREN COLON NUM FATARROW NUM_LIT SEMICOLON

// function definition
VAL ID ASSIGN LAMBDA LPAREN ID COLON NUM COMMA ID COLON STRING RPAREN COLON NUM FATARROW NUM_LIT SEMICOLON

// function definition
VAL ID ASSIGN LAMBDA LPAREN RPAREN COLON NUM FATARROW LBRACE IF TRUE THEN LBRACE NUM_LIT PLUS NUM_LIT SEMICOLON RBRACE ELSE LBRACE NUM_LIT SEMICOLON RBRACE SEMICOLON RBRACE SEMICOLON

// function defn with args
VAL ID ASSIGN LAMBDA LPAREN ID COLON NUM RPAREN COLON NUM FATARROW LBRACE IF TRUE THEN LBRACE NUM_LIT PLUS NUM_LIT SEMICOLON RBRACE ELSE LBRACE NUM_LIT SEMICOLON RBRACE SEMICOLON RBRACE SEMICOLON

// function call
ID LPAREN RPAREN SEMICOLON

// function call with args
ID LPAREN ID COMMA ID COMMA NUM_LIT PLUS NUM_LIT RPAREN SEMICOLON

// function call assignment
VAL ID COLON NUM ASSIGN NUM_LIT PLUS NUM_LIT SEMICOLON

// function call assignment with expressions
VAL ID COLON NUM ASSIGN ID LPAREN ID COMMA ID COMMA NUM_LIT PLUS NUM_LIT RPAREN SEMICOLON

// lambda expression assignment
VAL ID COLON LPAREN RPAREN THINARROW NUM ASSIGN LAMBDA LPAREN RPAREN COLON NUM FATARROW ID SEMICOLON

// lambda expression assignment
VAL ID COLON LPAREN RPAREN THINARROW NUM ASSIGN LAMBDA LPAREN RPAREN COLON UNIT FATARROW LBRACE ID PLUS ID SEMICOLON RBRACE SEMICOLON

// function call with lambda expression
ID LPAREN LPAREN LAMBDA LPAREN ID COLON NUM COMMA ID COLON NUM RPAREN COLON UNIT FATARROW ID PLUS ID RPAREN COMMA NUM_LIT RPAREN SEMICOLON

// empty list literal
LSQUARE RSQUARE SEMICOLON

// list literal
LSQUARE NUM_LIT COMMA NUM_LIT RSQUARE SEMICOLON

// list assignments
VAL ID COLON LIST NUM ASSIGN LSQUARE NUM_LIT COMMA NUM_LIT RSQUARE SEMICOLON

// list literals
LSQUARE LSQUARE NUM_LIT COMMA NUM_LIT RSQUARE RSQUARE SEMICOLON

// nested lists
VAL ID COLON LIST LIST NUM ASSIGN LSQUARE NUM_LIT COMMA NUM_LIT RSQUARE SEMICOLON

// map literals
LBRACE ID COLON NUM_LIT COMMA ID COLON NUM_LIT RBRACE SEMICOLON

// map assignments
VAL ID COLON LT STRING COLON NUM GT ASSIGN LBRACE ID COLON NUM_LIT COMMA ID COLON NUM_LIT RBRACE SEMICOLON

// nested map assignments
VAL ID COLON LT STRING COLON LT STRING COLON NUM GT GT ASSIGN LBRACE ID COLON LBRACE ID COLON ID RBRACE RBRACE SEMICOLON

// modules literals
MODULE_LIT DOT ID SEMICOLON

// modules function call
MODULE_LIT DOT ID LPAREN ID RPAREN SEMICOLON

// generics
VAL ID COLON GENERIC ASSIGN NUM_LIT PLUS NUM_LIT SEMICOLON

// anon fn as argument
// val filter = /\(f: (num) -> bool, xs: list num): list num => {
VAL ID ASSIGN LAMBDA LPAREN ID COLON LPAREN NUM RPAREN THINARROW BOOL COMMA ID COLON LIST NUM RPAREN COLON LIST NUM FATARROW LBRACE NUM_LIT SEMICOLON RBRACE SEMICOLON
