package catala
Install
dune-project
Dependency
Authors
Maintainers
Sources
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
val 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.tBox the expression from the outside
val 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.tFor closed expressions, similar to Bindlib.unbox
val 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.tRebuild the whole term, re-binding all variables and exposing free variables
val 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.tval 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.boxval 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.tval 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.tval 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.tval 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.tval elit :
'a Shared_ast__.Definitions.any Shared_ast__.Definitions.glit ->
't ->
(('a, 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't)
Catala_utils.Marked.tval 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.tval 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.tval 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.tval 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.tval 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.tval 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.tval 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.tval 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.tval eraise :
Shared_ast__.Definitions.except ->
't ->
(([ `Lcalc ], 't) Shared_ast__.Definitions.naked_gexpr Bindlib.box, 't)
Catala_utils.Marked.tval 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.tval 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.tval 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.tval 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.tval 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.tval 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.tval 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.tManipulation of marks
val with_pos :
Catala_utils.Pos.t ->
'm Shared_ast__.Definitions.mark ->
'm Shared_ast__.Definitions.markval 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.markAdds the given type information only on typed marks
val 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.markIdentity on untyped marks
val 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.markval 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.markval 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.markval maybe_ty :
?typ:Shared_ast__.Definitions.naked_typ ->
'm Shared_ast__.Definitions.mark ->
Shared_ast__.Definitions.naked_typ Catala_utils.Marked.posReturns the corresponding type on a typed expr, or typ (defaulting to TAny) at the current position on an untyped one
Manipulation of marked expressions
val ty :
('e, Shared_ast__.Definitions.typed Shared_ast__.Definitions.mark)
Catala_utils.Marked.t ->
Shared_ast__.Definitions.naked_typ Catala_utils.Marked.posval 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.tval 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.tTraversal functions
val 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.tShallow 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 eval 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.tRecursively 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.
val 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.tval 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 ->
'accApplies 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.emptyval 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.tShallow 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
val 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.tval 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.tval 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.tval 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.tval 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.tval 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.tval 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.tmake_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 asx<ex | true :- def>, whendefis a default term<j :- c>without exceptions, is collapsed into<ex | def><ex | false :- _>, whenexis a single exception, is rewritten asex
val 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.tBuilds a tuple; the mark argument is only used as witness and for position when building 0-uples
Transformations
val 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.tRemoves all calls to Log unary operators in the AST, replacing them by their argument.
val 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 ->
unitAnalysis and tests
val equal_location :
'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos ->
'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos ->
boolval compare_location :
'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos ->
'a Shared_ast__.Definitions.glocation Catala_utils.Marked.pos ->
intval 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 ->
boolDetermines if two expressions are equal, omitting their position information
val 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 ->
intStandard comparison function, suitable for e.g. Set.Make. Ignores position information
val is_value :
(('a Shared_ast__.Definitions.any, 't) Shared_ast__.Definitions.naked_gexpr,
't)
Catala_utils.Marked.t ->
boolval 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.tUsed by the optimizer to know when to stop