sig
type label = string
type t =
Num of int
| Var of string
| Op of Op.t * O.Ast.t * O.Ast.t
| Ifz of O.Ast.t * O.Ast.t * O.Ast.t
| Let of string * O.Ast.t * O.Ast.t
| App of O.Ast.t * O.Ast.t
| Fun of string * O.Ast.t
| Fix of string * O.Ast.t
| Rec of (O.Ast.label * O.Ast.t) list
| Access of O.Ast.t * O.Ast.label
| CopyWith of O.Ast.t * (O.Ast.label * O.Ast.t) list
| Obj of string option * (O.Ast.label * O.Ast.t) list
| Invoke of O.Ast.t * O.Ast.label
| ObjWith of string option * O.Ast.t * (O.Ast.label * O.Ast.t) list
end