| ELam of string * typ * exp
(* Function abstraction *)
+ | EVar of string
+ (* Variable bound by a function *)
| EApp of exp * exp
(* Function application *)
| ESet of string * exp
(* Set an environment variable *)
+ | EEnv of string
+ (* Get an environment variable *)
| ESeq of exp list
(* Monad sequencer; execute a number of commands in order *)
| ELocal of exp