PROGRAM := ITEM* ITEM := DEF | IMPORT DEF := def IDENT = TERM IMPORT := import IDENT TERM := TERMPART+ as TYPE | TERMPART+ | match TERM PAT* TERMPART := VAR | LAMBDA | LET | HOLE | ( TERM ) PAT := with IDENT+ => TERM HOLE := ? | ?{...} | ?IDENT{...} IDENT := x, y, z, ... VAR := IDENT APP := TERM TERM LIT := 0, 1, ... LAMBDA := fun IDENT+ => TERM LET := let IDENT = TERM in TERM TYPE := TYPEPART (-> TYPEPART)* TYPEPART := ATOM | ( ATOM ) COMMENTS := # ... to end of line