Scopelang.AstSourceAbstract syntax tree of the scope language
type location = | ScopeVar of ScopeVar.t Utils.Pos.marked| SubScopeVar of ScopeName.t
* SubScopeName.t Utils.Pos.marked
* ScopeVar.t Utils.Pos.markedtype typ = | TLit of Dcalc.Ast.typ_lit| TStruct of StructName.t| TEnum of EnumName.t| TArrow of typ Utils.Pos.marked * typ Utils.Pos.marked| TArray of typ| TAnytype expr = | ELocation of location| EVar of expr Bindlib.var Utils.Pos.marked| EStruct of StructName.t * expr Utils.Pos.marked StructFieldMap.t| EStructAccess of expr Utils.Pos.marked * StructFieldName.t * StructName.t| EEnumInj of expr Utils.Pos.marked * EnumConstructor.t * EnumName.t| EMatch of expr Utils.Pos.marked
* EnumName.t
* expr Utils.Pos.marked EnumConstructorMap.t| ELit of Dcalc.Ast.lit| EAbs of (expr, expr Utils.Pos.marked) Bindlib.mbinder Utils.Pos.marked
* typ Utils.Pos.marked list| EApp of expr Utils.Pos.marked * expr Utils.Pos.marked list| EOp of Dcalc.Ast.operator| EDefault of expr Utils.Pos.marked list
* expr Utils.Pos.marked
* expr Utils.Pos.marked| EIfThenElse of expr Utils.Pos.marked
* expr Utils.Pos.marked
* expr Utils.Pos.marked| EArray of expr Utils.Pos.marked list| ErrorOnEmpty of expr Utils.Pos.markedThe expressions use the Bindlib library, based on higher-order abstract syntax
type rule = | Definition of location Utils.Pos.marked
* typ Utils.Pos.marked
* expr Utils.Pos.marked| Assertion of expr Utils.Pos.marked| Call of ScopeName.t * SubScopeName.ttype scope_decl = {scope_decl_name : ScopeName.t;scope_sig : typ Utils.Pos.marked ScopeVarMap.t;scope_decl_rules : rule list;}type program = {program_scopes : scope_decl ScopeMap.t;program_enums : enum_ctx;program_structs : struct_ctx;}val make_abs :
vars ->
expr Utils.Pos.marked Bindlib.box ->
Utils.Pos.t ->
typ Utils.Pos.marked list ->
Utils.Pos.t ->
expr Utils.Pos.marked Bindlib.boxval make_app :
expr Utils.Pos.marked Bindlib.box ->
expr Utils.Pos.marked Bindlib.box list ->
Utils.Pos.t ->
expr Utils.Pos.marked Bindlib.boxval make_let_in :
Var.t ->
typ Utils.Pos.marked ->
expr Utils.Pos.marked Bindlib.box ->
expr Utils.Pos.marked Bindlib.box ->
expr Utils.Pos.marked Bindlib.box