package catala

  1. Overview
  2. Docs
Compiler and library for the literate programming language for tax code specification

Install

Dune Dependency

Authors

Maintainers

Sources

0.8.0.tar.gz
md5=1408a1cce45c7d5990b981e83e7589c2
sha512=eb3b923aa1f743378b4a05e30f50be5d180dc862a716270d747a90e469017f42fa5fc41352f02fbbf59cd2560f91c4f1b32cf38d80085b105d9387b0aed2039d

doc/catala.shared_ast/Shared_ast/Expr/index.html

Module Shared_ast.ExprSource

Functions handling the expressions of shared_ast

Boxed constructors

Sourceval box : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t

Box the expression from the outside

Sourceval unbox : (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t

For closed expressions, similar to Bindlib.unbox

Sourceval rebox : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t

Rebuild the whole term, re-binding all variables and exposing free variables

Sourceval evar : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t Var.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval bind : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t Var.t array -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t) Bindlib.mbinder Bindlib.box
Sourceval subst : (('a, 't) Shared_ast__.Definitions.naked_gexpr, (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t) Bindlib.mbinder -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t list -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t
Sourceval etuple : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t list -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval etupleaccess : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> int -> int -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval earray : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t list -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval elit : 'a Shared_ast__.Definitions.any Shared_ast__.Definitions.glit -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eabs : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr, (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t) Bindlib.mbinder Bindlib.box -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos list -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eapp : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t list -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eassert : (([< Shared_ast__.Definitions.dcalc | Shared_ast__.Definitions.lcalc ] as 'a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eop : ('a Shared_ast__.Definitions.any Shared_ast__.Definitions.any, 'k) Shared_ast__.Definitions.Op.t -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos list -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval edefault : (([< Shared_ast__.Definitions.desugared | Shared_ast__.Definitions.scopelang | Shared_ast__.Definitions.dcalc ] as 'a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t list -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eifthenelse : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eerroronempty : (([< Shared_ast__.Definitions.desugared | Shared_ast__.Definitions.scopelang | Shared_ast__.Definitions.dcalc ] as 'a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval ecatch : (([ `Lcalc ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> Shared_ast__.Definitions.except -> (([ `Lcalc ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> 't -> (([ `Lcalc ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval eraise : Shared_ast__.Definitions.except -> 't -> (([ `Lcalc ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval elocation : ([< Shared_ast__.Definitions.desugared | Shared_ast__.Definitions.scopelang ] as 'a) Shared_ast__.Definitions.glocation -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval estruct : Shared_ast__.Definitions.StructName.t -> (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t Shared_ast__.Definitions.StructField.Map.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval edstructaccess : (([ `Desugared ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> Catala_utils.String.t -> Shared_ast__.Definitions.StructName.t option -> 't -> (([ `Desugared ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval estructaccess : (([< Shared_ast__.Definitions.scopelang | Shared_ast__.Definitions.dcalc | Shared_ast__.Definitions.lcalc ] as 'a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> Shared_ast__.Definitions.StructField.t -> Shared_ast__.Definitions.StructName.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval einj : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> Shared_ast__.Definitions.EnumConstructor.t -> Shared_ast__.Definitions.EnumName.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval ematch : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> Shared_ast__.Definitions.EnumName.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t Shared_ast__.Definitions.EnumConstructor.Map.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval escopecall : Shared_ast__.Definitions.ScopeName.t -> (([< Shared_ast__.Definitions.desugared | Shared_ast__.Definitions.scopelang ] as 'a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t Shared_ast__.Definitions.ScopeVar.Map.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t

Manipulation of marks

Sourceval no_mark : 'm Shared_ast__.Definitions.mark -> 'm Shared_ast__.Definitions.mark
Sourceval mark_pos : 'm Shared_ast__.Definitions.mark -> Catala_utils.Pos.t
Sourceval with_pos : Catala_utils.Pos.t -> 'm Shared_ast__.Definitions.mark -> 'm Shared_ast__.Definitions.mark
Sourceval with_ty : 'm Shared_ast__.Definitions.mark -> ?pos:Catala_utils.Pos.t -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos -> 'm Shared_ast__.Definitions.mark

Adds the given type information only on typed marks

Sourceval map_ty : (Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos) -> 'm Shared_ast__.Definitions.mark -> 'm Shared_ast__.Definitions.mark

Identity on untyped marks

Sourceval map_mark : (Catala_utils.Pos.t -> Catala_utils.Pos.t) -> (Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos) -> 'm Shared_ast__.Definitions.mark -> 'm Shared_ast__.Definitions.mark
Sourceval map_mark2 : (Catala_utils.Pos.t -> Catala_utils.Pos.t -> Catala_utils.Pos.t) -> (Shared_ast__.Definitions.typed -> Shared_ast__.Definitions.typed -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos) -> 'm Shared_ast__.Definitions.mark -> 'm Shared_ast__.Definitions.mark -> 'm Shared_ast__.Definitions.mark
Sourceval fold_marks : (Catala_utils.Pos.t list -> Catala_utils.Pos.t) -> (Shared_ast__.Definitions.typed list -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos) -> 'm Shared_ast__.Definitions.mark list -> 'm Shared_ast__.Definitions.mark
Sourceval maybe_ty : ?typ:Shared_ast__.Definitions.naked_typ -> 'm Shared_ast__.Definitions.mark -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos

Returns the corresponding type on a typed expr, or typ (defaulting to TAny) at the current position on an untyped one

Manipulation of marked expressions

Sourceval pos : ('a, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> Catala_utils.Pos.t
Sourceval ty : ('e, Shared_ast__.Definitions.typed Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos
Sourceval set_ty : Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos -> ('a, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> ('a, Shared_ast__.Definitions.typed Shared_ast__.Definitions.mark) Catala_utils.Marked.t
Sourceval untype : (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> (('a, Shared_ast__.Definitions.untyped Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, Shared_ast__.Definitions.untyped Shared_ast__.Definitions.mark) Catala_utils.Marked.t

Traversal functions

Sourceval map : f: ((('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't1) Catala_utils.Marked.t -> (('a, 't2) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't2) Catala_utils.Marked.t) -> (('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't2) Catala_utils.Marked.t -> (('a, 't2) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't2) Catala_utils.Marked.t

Shallow mapping on expressions (non recursive): applies the given function to all sub-terms of the given expression, and rebuilds the node.

When applying a map transform to an expression, this avoids expliciting all cases that remain unchanged. For instance, if you want to remove all errors on empty, you can write

  let remove_error_empty =
    let rec f e =
      match Marked.unmark e with
      | ErrorOnEmpty e1 -> Expr.map f e1
      | _ -> Expr.map f e
    in
    f e
Sourceval map_top_down : f: ((('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't1) Catala_utils.Marked.t -> (('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't2) Catala_utils.Marked.t) -> (('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't1) Catala_utils.Marked.t -> (('a, 't2) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't2) Catala_utils.Marked.t

Recursively applies f to the nodes of the expression tree. The type returned by f is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees.

Sourceval map_marks : f:('t1 -> 't2) -> (('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't1) Catala_utils.Marked.t -> (('a, 't2) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't2) Catala_utils.Marked.t
Sourceval shallow_fold : ((('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> 'acc -> 'acc) -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> 'acc -> 'acc

Applies a function on all sub-terms of the given expression. Does not recurse, and doesn't open binders. Useful as helper for recursive calls within traversal functions. This can be used to compute free variables with e.g.:

  let rec free_vars = function
    | EVar v, _ -> Var.Set.singleton v
    | EAbs { binder; _ }, _ ->
      let vs, body = Bindlib.unmbind binder in
      Array.fold_right Var.Set.remove vs (free_vars body)
    | e ->
      shallow_fold (fun e -> Var.Set.union (free_vars e)) e Var.Set.empty
Sourceval map_gather : acc:'acc -> join:('acc -> 'acc -> 'acc) -> f: ((('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't1) Catala_utils.Marked.t -> 'acc * (('a, 't2) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't2) Catala_utils.Marked.t) -> (('a, 't1) Shared_ast__.Definitions.naked_gexpr, 't2) Catala_utils.Marked.t -> 'acc * (('a, 't2) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't2) Catala_utils.Marked.t

Shallow mapping similar to map, but additionally allows to gather an accumulator bottom-up. acc is the accumulator value returned on terminal nodes, and join is used to merge accumulators from the different sub-terms of an expression. acc is assumed to be a neutral element for join. Typically used with a set of variables used in the rewrite:

  let rec rewrite e =
    match Marked.unmark e with
    | Specific_case ->
      Var.Set.singleton x, some_rewrite_fun e
    | _ ->
      Expr.map_gather ~acc:Var.Set.empty ~join:Var.Set.union ~f:rewrite e
}]


See [Lcalc.closure_conversion] for a real-world example. 

Expression building helpers

Sourceval make_var : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t Var.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t
Sourceval make_abs : (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t Var.vars -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos list -> Catala_utils.Pos.t -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t
Sourceval make_app : (('a Shared_ast__.Definitions.any, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t list -> Catala_utils.Pos.t -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t
Sourceval empty_thunked_term : 'm Shared_ast__.Definitions.mark -> (([< Shared_ast__.Definitions.dcalc | Shared_ast__.Definitions.desugared | Shared_ast__.Definitions.scopelang ], 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t
Sourceval make_let_in : (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t Var.t -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> Catala_utils.Pos.t -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t
Sourceval make_multiple_let_in : (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t Var.vars -> Shared_ast__.Definitions.naked_typ Catala_utils.Marked.pos list -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t list -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> Catala_utils.Pos.t -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t
Sourceval make_default : (([< Shared_ast__.Definitions.desugared | Shared_ast__.Definitions.scopelang | Shared_ast__.Definitions.dcalc ] as 'a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t list -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t -> 't -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t

make_default ?pos exceptions just cons builds a term semantically equivalent to <exceptions | just :- cons> (the EDefault constructor) while avoiding redundant nested constructions. The position is extracted from just by default.

Note that, due to the simplifications taking place, the result might not be of the form EDefault:

  • <true :- x> is rewritten as x
  • <ex | true :- def>, when def is a default term <j :- c> without exceptions, is collapsed into <ex | def>
  • <ex | false :- _>, when ex is a single exception, is rewritten as ex
Sourceval make_tuple : (('a Shared_ast__.Definitions.any, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t list -> 'm Shared_ast__.Definitions.mark -> (('a, 'm Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 'm Shared_ast__.Definitions.mark) Catala_utils.Marked.t

Builds a tuple; the mark argument is only used as witness and for position when building 0-uples

Transformations

Sourceval remove_logging_calls : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't) Catala_utils.Marked.t

Removes all calls to Log unary operators in the AST, replacing them by their argument.

Sourceval format : ?debug:bool -> Shared_ast__.Definitions.decl_ctx -> Format.formatter -> ((_, _ Shared_ast__.Definitions.mark) Shared_ast__.Definitions.naked_gexpr, _ Shared_ast__.Definitions.mark) Catala_utils.Marked.t -> unit

Analysis and tests

Sourceval equal_lit : 'a Shared_ast__.Definitions.glit -> 'a Shared_ast__.Definitions.glit -> bool
Sourceval compare_lit : 'a Shared_ast__.Definitions.glit -> 'a Shared_ast__.Definitions.glit -> int
Sourceval equal_location : 'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos -> 'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos -> bool
Sourceval compare_location : 'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos -> 'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos -> int
Sourceval equal : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> bool

Determines if two expressions are equal, omitting their position information

Sourceval compare : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> int

Standard comparison function, suitable for e.g. Set.Make. Ignores position information

Sourceval is_value : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> bool
Sourceval free_vars : (('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t Var.Set.t
Sourceval size : (('a, 't) Shared_ast__.Definitions.naked_gexpr, 't) Catala_utils.Marked.t -> int

Used by the optimizer to know when to stop

Sourcemodule Box : sig ... end
OCaml

Innovation. Community. Security.