package catala

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module Lcalc.AstSource

Abstract syntax tree for the lambda calculus

Abstract syntax tree

The expressions use the Bindlib library, based on higher-order abstract syntax

Sourcetype lit =
  1. | LBool of bool
  2. | LInt of Runtime.integer
  3. | LRat of Runtime.decimal
  4. | LMoney of Runtime.money
  5. | LUnit
  6. | LDate of Runtime.date
  7. | LDuration of Runtime.duration
Sourcetype except =
  1. | ConflictError
  2. | EmptyError
  3. | NoValueProvided
  4. | Crash
Sourcetype 'm mark = 'm Dcalc.Ast.mark
Sourcetype 'm marked_expr = ('m expr, 'm) Dcalc.Ast.marked
Sourceand 'm expr =
  1. | EVar of 'm expr Bindlib.var
  2. | ETuple of 'm marked_expr list * Dcalc.Ast.StructName.t option
    (*

    The MarkedString.info is the former struct field name

    *)
  3. | ETupleAccess of 'm marked_expr * int * Dcalc.Ast.StructName.t option * Dcalc.Ast.typ Utils.Marked.pos list
    (*

    The MarkedString.info is the former struct field name

    *)
  4. | EInj of 'm marked_expr * int * Dcalc.Ast.EnumName.t * Dcalc.Ast.typ Utils.Marked.pos list
    (*

    The MarkedString.info is the former enum case name

    *)
  5. | EMatch of 'm marked_expr * 'm marked_expr list * Dcalc.Ast.EnumName.t
    (*

    The MarkedString.info is the former enum case name

    *)
  6. | EArray of 'm marked_expr list
  7. | ELit of lit
  8. | EAbs of ('m expr, 'm marked_expr) Bindlib.mbinder * Dcalc.Ast.typ Utils.Marked.pos list
  9. | EApp of 'm marked_expr * 'm marked_expr list
  10. | EAssert of 'm marked_expr
  11. | EOp of Dcalc.Ast.operator
  12. | EIfThenElse of 'm marked_expr * 'm marked_expr * 'm marked_expr
  13. | ERaise of except
  14. | ECatch of 'm marked_expr * except * 'm marked_expr
Sourcetype 'm program = ('m expr, 'm) Dcalc.Ast.program_generic

Variable helpers

Sourcetype 'm var = 'm expr Bindlib.var
Sourcetype 'm vars = 'm expr Bindlib.mvar
Sourcemodule Var : sig ... end
Sourcemodule VarMap : Map.S with type key = Var.t
Sourcemodule VarSet : Set.S with type elt = Var.t
Sourceval new_var : string -> 'm var
Sourcetype 'm binder = ('m expr, 'm marked_expr) Bindlib.binder

Program traversal

Sourceval map_expr : 'a -> f:('a -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box) -> ('m1 expr, 'm2 mark) Utils.Marked.t -> 'm2 marked_expr Bindlib.box

See Dcalc.Ast.map_expr

Sourceval map_expr_top_down : f:('m1 marked_expr -> ('m1 expr, 'm2 mark) Utils.Marked.t) -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box

See Dcalc.Ast.map_expr_top_down

Sourceval map_expr_marks : f:('m1 mark -> 'm2 mark) -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box

See Dcalc.Ast.map_expr_marks

Sourceval untype_program : 'm program -> Dcalc.Ast.untyped program

Boxed constructors

Sourceval earray : 'm marked_expr Bindlib.box list -> 'm mark -> 'm marked_expr Bindlib.box
Sourceval elit : lit -> 'm mark -> 'm marked_expr Bindlib.box
Sourceval eraise : except -> 'm mark -> 'm marked_expr Bindlib.box

Language terms construction

Sourceval make_var : ('m var, 'm) Dcalc.Ast.marked -> 'm marked_expr Bindlib.box
Sourceval option_enum : Dcalc.Ast.EnumName.t
Sourceval make_none : 'm mark -> 'm marked_expr Bindlib.box

e' = 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.

Sourceval box_expr : 'm marked_expr -> 'm marked_expr Bindlib.box

Special symbols

Sourceval handle_default : Var.t
Sourceval handle_default_opt : Var.t
OCaml

Innovation. Community. Security.