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.durationtype expr = | EVar of expr Bindlib.var Utils.Pos.marked| ETuple of expr Utils.Pos.marked list * Dcalc.Ast.StructName.t optionThe MarkedString.info is the former struct field name
| ETupleAccess of expr Utils.Pos.marked
* int
* Dcalc.Ast.StructName.t option
* Dcalc.Ast.typ Utils.Pos.marked listThe MarkedString.info is the former struct field name
| EInj of expr Utils.Pos.marked
* int
* Dcalc.Ast.EnumName.t
* Dcalc.Ast.typ Utils.Pos.marked listThe MarkedString.info is the former enum case name
| EMatch of expr Utils.Pos.marked
* expr Utils.Pos.marked list
* Dcalc.Ast.EnumName.tThe MarkedString.info is the former enum case name
| EArray of expr Utils.Pos.marked list| ELit of lit| EAbs of (expr, expr Utils.Pos.marked) Bindlib.mbinder Utils.Pos.marked
* Dcalc.Ast.typ Utils.Pos.marked list| EApp of expr Utils.Pos.marked * expr Utils.Pos.marked list| EAssert of expr Utils.Pos.marked| EOp of Dcalc.Ast.operator| EIfThenElse of expr Utils.Pos.marked
* expr Utils.Pos.marked
* expr Utils.Pos.marked| ERaise of except| ECatch of expr Utils.Pos.marked * except * expr Utils.Pos.markedval make_abs :
vars ->
expr Utils.Pos.marked Bindlib.box ->
Utils.Pos.t ->
Dcalc.Ast.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 ->
Dcalc.Ast.typ Utils.Pos.marked ->
expr Utils.Pos.marked Bindlib.box ->
expr Utils.Pos.marked Bindlib.box ->
expr Utils.Pos.marked Bindlib.box