exception SymbolError of stringtype 'typ lambda_annot = 'typ optiontype 'typ vkind = | Immut| AnnotMut of 'typ| Mut
type ('typ, 'v) vdef = 'typ vkind * 'vtype ('a, 'typ, 'tag, 'v) pattern = | PatType of 'typ| PatVar of ('typ, 'v) vdef| PatLit of Mlsem_lang.Const.t| PatTag of 'tag * ('a, 'typ, 'tag, 'v) pattern| PatAnd of ('a, 'typ, 'tag, 'v) pattern * ('a, 'typ, 'tag, 'v) pattern| PatOr of ('a, 'typ, 'tag, 'v) pattern * ('a, 'typ, 'tag, 'v) pattern| PatTuple of ('a, 'typ, 'tag, 'v) pattern list| PatCons of ('a, 'typ, 'tag, 'v) pattern * ('a, 'typ, 'tag, 'v) pattern| PatRecord of (string * ('a, 'typ, 'tag, 'v) pattern) list * bool| PatAssign of ('typ, 'v) vdef * Mlsem_lang.Const.t
and ('a, 'typ, 'enu, 'tag, 'v) ast = | Magic of 'typ| Const of Mlsem_lang.Const.t| Var of 'v| Enum of 'enu| Tag of 'tag * ('a, 'typ, 'enu, 'tag, 'v) t| Suggest of 'v * 'typ list * ('a, 'typ, 'enu, 'tag, 'v) t| Lambda of 'v * 'typ lambda_annot * ('a, 'typ, 'enu, 'tag, 'v) t| LambdaRec of ('v * 'typ lambda_annot * ('a, 'typ, 'enu, 'tag, 'v) t) list| Ite of ('a, 'typ, 'enu, 'tag, 'v) t
* 'typ
* ('a, 'typ, 'enu, 'tag, 'v) t
* ('a, 'typ, 'enu, 'tag, 'v) t| App of ('a, 'typ, 'enu, 'tag, 'v) t * ('a, 'typ, 'enu, 'tag, 'v) t| Let of ('typ, 'v) vdef
* ('a, 'typ, 'enu, 'tag, 'v) t
* ('a, 'typ, 'enu, 'tag, 'v) t| Declare of ('typ, 'v) vdef * ('a, 'typ, 'enu, 'tag, 'v) t| Tuple of ('a, 'typ, 'enu, 'tag, 'v) t list| Cons of ('a, 'typ, 'enu, 'tag, 'v) t * ('a, 'typ, 'enu, 'tag, 'v) t| Projection of Mlsem_system.Ast.projection * ('a, 'typ, 'enu, 'tag, 'v) t| Constructor of Mlsem_system.Ast.constructor * ('a, 'typ, 'enu, 'tag, 'v) t list| Operation of Mlsem_system.Ast.operation * ('a, 'typ, 'enu, 'tag, 'v) t| Record of (string * ('a, 'typ, 'enu, 'tag, 'v) t) list| RecordUpdate of ('a, 'typ, 'enu, 'tag, 'v) t
* string
* ('a, 'typ, 'enu, 'tag, 'v) t option| TypeCast of ('a, 'typ, 'enu, 'tag, 'v) t * 'typ option * Mlsem_system.Ast.check| TypeCoerce of ('a, 'typ, 'enu, 'tag, 'v) t
* 'typ option
* Mlsem_system.Ast.check| VarAssign of 'v * ('a, 'typ, 'enu, 'tag, 'v) t| PatMatch of ('a, 'typ, 'enu, 'tag, 'v) t
* (('a, 'typ, 'tag, 'v) pattern * ('a, 'typ, 'enu, 'tag, 'v) t) list| Cond of ('a, 'typ, 'enu, 'tag, 'v) t
* 'typ
* ('a, 'typ, 'enu, 'tag, 'v) t
* ('a, 'typ, 'enu, 'tag, 'v) t option| While of ('a, 'typ, 'enu, 'tag, 'v) t * 'typ * ('a, 'typ, 'enu, 'tag, 'v) t| Seq of ('a, 'typ, 'enu, 'tag, 'v) t * ('a, 'typ, 'enu, 'tag, 'v) t| Alt of ('a, 'typ, 'enu, 'tag, 'v) t * ('a, 'typ, 'enu, 'tag, 'v) t| Return of ('a, 'typ, 'enu, 'tag, 'v) t| Break| Continue
and ('a, 'typ, 'enu, 'tag, 'v) t = 'a * ('a, 'typ, 'enu, 'tag, 'v) ast