sig
type id = string
type field = string
type exp =
Int of int
| Add of HOF_sugar.exp * HOF_sugar.exp
| Sub of HOF_sugar.exp * HOF_sugar.exp
| Mul of HOF_sugar.exp * HOF_sugar.exp
| Let of HOF_sugar.id * HOF_sugar.exp * HOF_sugar.exp
| Id of HOF_sugar.id
| If0 of HOF_sugar.exp * HOF_sugar.exp * HOF_sugar.exp
| Lambda of HOF_sugar.id list * HOF_sugar.exp
| Apply of HOF_sugar.exp * HOF_sugar.exp list
| Record of (HOF_sugar.field * HOF_sugar.exp) list
| SetField of HOF_sugar.exp * HOF_sugar.field * HOF_sugar.exp
| GetField of HOF_sugar.exp * HOF_sugar.field
| True
| False
| If of HOF_sugar.exp * HOF_sugar.exp * HOF_sugar.exp
| And of HOF_sugar.exp * HOF_sugar.exp
| Or of HOF_sugar.exp * HOF_sugar.exp
| IntEq of HOF_sugar.exp * HOF_sugar.exp
| Empty
| Cons of HOF_sugar.exp * HOF_sugar.exp
| Head of HOF_sugar.exp
| Tail of HOF_sugar.exp
| IsEmpty of HOF_sugar.exp
end