AST
(* MLPolyR Abstract Syntax *)
datatype exp =
LETexp of def list * exp
| IFexp of exp * exp * exp
| LCASEexp of exp * lmatch
| WHEREexp of exp * exp field list
| BINOPexp of binop * exp * exp
| UOPexp of uop * exp
| APPexp of exp * exp
| ASSIGNexp of exp * mlabel * exp
| SELexp of exp * mlabel
| FETCHexp of exp * mlabel
| BOOLexp of bool
| NUMBERexp of integer
| STRINGexp of string
| VARexp of symbol
| SEQexp of exp list
| LISTexp of exp list
| RECORDexp of exp field list
| TUPLEexp of exp list
| MATCHexp of (mlabel * pat * exp) list * exp option
| CONexp of mlabel * exp
| SWIDENexp of exp * mlabel
| MCASEexp of exp * exp
| FNexp of pat * exp
| MARKexp of exp * region
and def =
VALdef of pat * exp
| FUNdef of function list * region
and function = FUN of symbol * pat list * exp * region
and pat =
WILDpat
| VARpat of symbol
| TUPLEpat of pat list
| RECORDpat of pat field list
| MATCHpat of pat field list
| ANDpat of pat * pat
| MARKpat of pat * region
and lmatch = { nilcase: exp, conscase: pat * pat * exp }
type program = exp