val annotate : Uuid.t -> Exp.t -> Exp.t
Create.create defs exp
constructs a canonical-shape. Thedefs
give context for sub-expressions of the form:apply n exps
;n
being a reference to the n'th definition indefs
.Definition are required for
record
s andvariant
s, but may also occurs for any cyclic expression: in this case being constructed usingdefine
.Within a definition body,
var i
refers to the i'th formal type-var, and corresponds to the i'the argument of an applicationargs
.
val basetype : Uuid.t -> Exp.t list -> Exp.t
val tuple : Exp.t list -> Exp.t
val poly_variant : Location.t -> (string * Exp.t option) list -> Exp.t
val var : int -> Exp.t
val apply : Def.t -> Exp.t list -> Exp.t
val recurse : int -> Exp.t list -> Exp.t
val define : Exp.t -> Def.t
val record : (string * Exp.t) list -> Exp.t
val variant : (string * Exp.t list) list -> Exp.t
val create : Exp.t -> t