Lcalc.AstSourceAbstract syntax tree for the lambda calculus
The expressions use the Bindlib library, based on higher-order abstract syntax
type lit = | LBool of bool| LInt of Runtime.integer| LRat of Runtime.decimal| LMoney of Runtime.money| LUnit| LDate of Runtime.date| LDuration of Runtime.durationand 'm expr = | EVar of 'm expr Bindlib.var| ETuple of 'm marked_expr list * Dcalc.Ast.StructName.t optionThe MarkedString.info is the former struct field name
| ETupleAccess of 'm marked_expr
* int
* Dcalc.Ast.StructName.t option
* Dcalc.Ast.typ Utils.Marked.pos listThe MarkedString.info is the former struct field name
| EInj of 'm marked_expr
* int
* Dcalc.Ast.EnumName.t
* Dcalc.Ast.typ Utils.Marked.pos listThe MarkedString.info is the former enum case name
| EMatch of 'm marked_expr * 'm marked_expr list * Dcalc.Ast.EnumName.tThe MarkedString.info is the former enum case name
| EArray of 'm marked_expr list| ELit of lit| EAbs of ('m expr, 'm marked_expr) Bindlib.mbinder
* Dcalc.Ast.typ Utils.Marked.pos list| EApp of 'm marked_expr * 'm marked_expr list| EAssert of 'm marked_expr| EOp of Dcalc.Ast.operator| EIfThenElse of 'm marked_expr * 'm marked_expr * 'm marked_expr| ERaise of except| ECatch of 'm marked_expr * except * 'm marked_exprval map_expr :
'a ->
f:('a -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box) ->
('m1 expr, 'm2 mark) Utils.Marked.t ->
'm2 marked_expr Bindlib.boxSee Dcalc.Ast.map_expr
val map_expr_top_down :
f:('m1 marked_expr -> ('m1 expr, 'm2 mark) Utils.Marked.t) ->
'm1 marked_expr ->
'm2 marked_expr Bindlib.boxSee Dcalc.Ast.map_expr_top_down
val map_expr_marks :
f:('m1 mark -> 'm2 mark) ->
'm1 marked_expr ->
'm2 marked_expr Bindlib.boxSee Dcalc.Ast.map_expr_marks
val etuple :
'm marked_expr Bindlib.box list ->
Dcalc.Ast.StructName.t option ->
'm mark ->
'm marked_expr Bindlib.boxval etupleaccess :
'm marked_expr Bindlib.box ->
int ->
Dcalc.Ast.StructName.t option ->
Dcalc.Ast.typ Utils.Marked.pos list ->
'm mark ->
'm marked_expr Bindlib.boxval einj :
'm marked_expr Bindlib.box ->
int ->
Dcalc.Ast.EnumName.t ->
Dcalc.Ast.typ Utils.Marked.pos list ->
'm mark ->
'm marked_expr Bindlib.boxval ematch :
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box list ->
Dcalc.Ast.EnumName.t ->
'm mark ->
'm marked_expr Bindlib.boxval eabs :
('m expr, 'm marked_expr) Bindlib.mbinder Bindlib.box ->
Dcalc.Ast.typ Utils.Marked.pos list ->
'm mark ->
'm marked_expr Bindlib.boxval eapp :
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box list ->
'm mark ->
'm marked_expr Bindlib.boxval eifthenelse :
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
'm mark ->
'm marked_expr Bindlib.boxval ecatch :
'm marked_expr Bindlib.box ->
except ->
'm marked_expr Bindlib.box ->
'm mark ->
'm marked_expr Bindlib.boxval make_abs :
'm vars ->
'm marked_expr Bindlib.box ->
Dcalc.Ast.typ Utils.Marked.pos list ->
'm mark ->
'm marked_expr Bindlib.boxval make_app :
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box list ->
'm mark ->
'm marked_expr Bindlib.boxval make_let_in :
'm var ->
Dcalc.Ast.typ Utils.Marked.pos ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
Utils.Pos.t ->
'm marked_expr Bindlib.boxval make_multiple_let_in :
'm vars ->
Dcalc.Ast.typ Utils.Marked.pos list ->
'm marked_expr Bindlib.box list ->
'm marked_expr Bindlib.box ->
Utils.Pos.t ->
'm marked_expr Bindlib.boxval make_matchopt_with_abs_arms :
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.boxval make_matchopt :
'm mark ->
'm var ->
Dcalc.Ast.typ Utils.Marked.pos ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.box ->
'm marked_expr Bindlib.boxe' = make_matchopt'' pos v e e_none e_some Builds the term corresponding to match e with | None -> fun () -> e_none |Some -> fun v -> e_some.