package catala
Install
    
    dune-project
 Dependency
Authors
Maintainers
Sources
md5=2615968670ac21b1d00386a9b04b3843
    
    
  sha512=eff292fdd75012f26ce7b17020f5a8374eef37cd4dd6ba60338dfbe89fbcad3443d1b409e44c182b740da9f58dff7e76dcb8ddefe47f9b2b160666d1c6930143
    
    
  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, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edBox the expression from the outside
val unbox : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edFor closed expressions, similar to Bindlib.unbox
val unbox_closed : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edSimilar to unbox, but with an added assertion check on the expression being closed
val rebox : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edRebuild the whole term, re-binding all variables and exposing free variables
val evar : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.t ->
  'm Shared_ast__.Definitions.mark ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eexternal : 
  name:Shared_ast__.Definitions.external_ref Catala_utils.Mark.pos ->
  'm Shared_ast__.Definitions.mark ->
  ((< explicitScopes : Shared_ast__.Definitions.no.. >,
     < explicitScopes : Shared_ast__.Definitions.no.. >,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval bind : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.t
    array ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed)
    Bindlib.mbinder
    Bindlib.boxval subst : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed)
    Bindlib.mbinder ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval etuple : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval etupleaccess : 
  e:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  index:int ->
  size:int ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval earray : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval elit : 
  Shared_ast__.Definitions.lit ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eabs : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed)
    Bindlib.mbinder
    Bindlib.box ->
  Catala_utils.Pos.t list ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eabs_ghost : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed)
    Bindlib.mbinder
    Bindlib.box ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edSame as eabs but without binders' positions
val eapp : 
  f:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  args:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed
      list ->
  tys:Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eassert : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  ((< assertions : Shared_ast__.Definitions.yes.. > as 'a,
     < assertions : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval efatalerror : 
  Catala_runtime.error ->
  'm Shared_ast__.Definitions.mark ->
  ((< .. >, < .. >, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval epos : 
  Catala_utils.Pos.t ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eappop : 
  op:'a Shared_ast__.Definitions.Op.t Catala_utils.Mark.pos ->
  args:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed
      list ->
  tys:Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval edefault : 
  excepts:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed
      list ->
  just:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  cons:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval epuredefault : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eifthenelse : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eempty : 
  'm Shared_ast__.Definitions.mark ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval eerroronempty : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval elocation : 
  'a Shared_ast__.Definitions.glocation ->
  'm Shared_ast__.Definitions.mark ->
  ((< .. > as 'a, < .. > as 'a, 'm) Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval estruct : 
  name:Shared_ast__.Definitions.StructName.t ->
  fields:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed
      Shared_ast__.Definitions.StructField.Map.t ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval edstructamend : 
  name_opt:Shared_ast__.Definitions.StructName.t option ->
  e:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  fields:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed
      Catala_utils.String.Map.t ->
  'm Shared_ast__.Definitions.mark ->
  ((< syntacticNames : Shared_ast__.Definitions.yes.. > as 'a,
     < syntacticNames : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval edstructaccess : 
  name_opt:Shared_ast__.Definitions.StructName.t option ->
  field:Catala_utils.String.t ->
  e:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  ((< syntacticNames : Shared_ast__.Definitions.yes.. > as 'a,
     < syntacticNames : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval estructaccess : 
  name:Shared_ast__.Definitions.StructName.t ->
  field:Shared_ast__.Definitions.StructField.t ->
  e:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval einj : 
  name:Shared_ast__.Definitions.EnumName.t ->
  cons:Shared_ast__.Definitions.EnumConstructor.t ->
  e:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval ematch : 
  name:Shared_ast__.Definitions.EnumName.t ->
  e:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed ->
  cases:
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed
      Shared_ast__.Definitions.EnumConstructor.Map.t ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval escopecall : 
  scope:Shared_ast__.Definitions.ScopeName.t ->
  args:
    (Catala_utils.Pos.t
     * (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
         'm Shared_ast__.Definitions.mark)
         Catala_utils.Mark.ed)
      Shared_ast__.Definitions.ScopeVar.Map.t ->
  'm Shared_ast__.Definitions.mark ->
  ((< explicitScopes : Shared_ast__.Definitions.yes.. > as 'a,
     < explicitScopes : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval ecustom : 
  Obj.t ->
  Type.t list ->
  Type.t ->
  'm Shared_ast__.Definitions.mark ->
  ((< custom : Shared_ast__.Definitions.yes.. >,
     < custom : Shared_ast__.Definitions.yes.. >,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval fun_id : 
  ?var_name:string ->
  'm Shared_ast__.Definitions.mark ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edThe type of the mark, if typed, is assumed to correspond to the argument type, not the function type
Manipulation of marks
val get_attr : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (Catala_utils.Pos.attr -> 'b option) ->
  'b optionval get_attrs : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (Catala_utils.Pos.attr -> 'b option) ->
  'b listval set_attrs : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (string list Catala_utils.Mark.pos
   * Shared_ast__.Definitions.attr_value Catala_utils.Mark.pos)
    list ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval take_attr : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (Catala_utils.Pos.attr -> 'b option) ->
  'b option
  * (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.edDiscards the attributes: useful when copying a mark around.
Discards the attributes: useful when copying a mark around.
Returns an empty mark, using the argument as type witness. Note that the custom part is kept on Custom 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.Mark.pos ->
  'm Shared_ast__.Definitions.markAdds the given type information only on typed marks
val map_ty : 
  (Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
    Shared_ast__.Definitions.naked_typ Catala_utils.Mark.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.Mark.pos ->
    Shared_ast__.Definitions.naked_typ Catala_utils.Mark.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.Mark.pos) ->
  'm Shared_ast__.Definitions.mark ->
  'm Shared_ast__.Definitions.mark ->
  'm Shared_ast__.Definitions.markRaises Invalid_arg on custom marks
val fold_marks : 
  (Catala_utils.Pos.t list -> Catala_utils.Pos.t) ->
  (Shared_ast__.Definitions.typed list ->
    Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos) ->
  'm Shared_ast__.Definitions.mark list ->
  'm Shared_ast__.Definitions.markRaises Invalid_arg on custom marks
val maybe_ty : 
  ?typ:Shared_ast__.Definitions.naked_typ ->
  'm Shared_ast__.Definitions.mark ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.posReturns the corresponding type on a typed expr, or typ (defaulting to TForAll) at the current position on an untyped one
Type witness for untyped marks
Type witness for untyped marks
Predefined types
Only used in some backends where enums piggy-back on structs (e.g. C)
val option_enum_config : 
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos
    Shared_ast__.Definitions.EnumConstructor.Map.tFake structure (there is no corresponding decl) used for categorising PosLit terms in scalc
Manipulation of marked expressions
val ty : 
  ('e, Shared_ast__.Definitions.typed Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.posval set_ty : 
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
  ('a, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed ->
  ('a, Shared_ast__.Definitions.typed Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval untype : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, Shared_ast__.Definitions.untyped)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    Shared_ast__.Definitions.untyped Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edTraversal functions
val map : 
  ?typ:
    (Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
      Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos) ->
  ?op:
    ('a Shared_ast__.Definitions.Op.t Catala_utils.Mark.pos ->
      'b Shared_ast__.Definitions.Op.t Catala_utils.Mark.pos) ->
  f:
    ((('a, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
       'm1 Shared_ast__.Definitions.mark)
       Catala_utils.Mark.ed ->
      (('b, 'b, 'm2) Shared_ast__.Definitions.base_gexpr Bindlib.box,
        'm2 Shared_ast__.Definitions.mark)
        Catala_utils.Mark.ed) ->
  (('a, 'b, 'm1) Shared_ast__.Definitions.base_gexpr,
    'm2 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('b, 'b, 'm2) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm2 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edShallow mapping on expressions (non recursive): applies the given function to all sub-terms of the given expression, and rebuilds the node.
This function makes it very concise to transform only certain nodes of the AST. For instance, if you want to remove all errors on empty, you can write
  let remove_error_empty e =
    let rec f e =
      match Mark.remove e with
      | EErrorOnEmpty e1 -> Expr.map ~f e1
      | _ -> Expr.map ~f e
    in
    f eThis can even be used to translate between different kinds of ASTs: see Lcalc.Compile_without_exceptions for an example. The structure is like this:
  let rec translate = function
    | SpecificCase e -> TargetCase (translate e)
    | (All | Other | Common | Cases) as e -> Expr.map ~f:translate eThe e parameter passed to map here needs to have only the common cases in its shallow type, but can still contain any node from the starting AST deeper inside: this is where the second type parameter to base_gexpr becomes useful.
The typ argument, if specified, will apply a transformation both on type annotations, if present, and on types appearing within the AST nodes.
The op argument must be specified for the EAppOp case to be handled.
val map_top_down : 
  f:
    ((('a, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
       'm1 Shared_ast__.Definitions.mark)
       Catala_utils.Mark.ed ->
      (('a, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
        'm2 Shared_ast__.Definitions.mark)
        Catala_utils.Mark.ed) ->
  (('a, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
    'm1 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm2) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm2 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edRecursively 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:('m1 Shared_ast__.Definitions.mark -> 'm2 Shared_ast__.Definitions.mark) ->
  (('a, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
    'm1 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm2) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm2 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval shallow_fold : 
  ((('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
     'm Shared_ast__.Definitions.mark)
     Catala_utils.Mark.ed ->
    'acc ->
    'acc) ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  'acc ->
  'accApplies a function on all sub-terms of the given expression. Does not recurse. It opens binders unless you avoid sending binders to the function like the example below. 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, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
       'm1 Shared_ast__.Definitions.mark)
       Catala_utils.Mark.ed ->
      'acc
      * (('a, 'a, 'm2) Shared_ast__.Definitions.base_gexpr Bindlib.box,
          'm2 Shared_ast__.Definitions.mark)
          Catala_utils.Mark.ed) ->
  (('a, 'a, 'm1) Shared_ast__.Definitions.base_gexpr,
    'm2 Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  'acc
  * (('a, 'a, 'm2) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm2 Shared_ast__.Definitions.mark)
      Catala_utils.Mark.edShallow 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 Mark.remove 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 eSee Lcalc.closure_conversion for a real-world example.
Expression building helpers
val make_var : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.t ->
  'm Shared_ast__.Definitions.mark ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval make_abs : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.var
    Catala_utils.Mark.pos
    list ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  Catala_utils.Pos.t ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edWarning: assumes no polymorphism, no type variables will be quantified
val make_ghost_abs : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.var
    list ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  Catala_utils.Pos.t ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edSame as make_abs without binders' positions
val make_app : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  Catala_utils.Pos.t ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval make_puredefault : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval make_pos : 
  Catala_utils.Pos.t ->
  'm Shared_ast__.Definitions.mark ->
  ((< defaultTerms : Shared_ast__.Definitions.no.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.no.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edm is used as type witness, but both position and type are overriden
val make_erroronempty : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     < defaultTerms : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval empty_thunked_term : 
  'm Shared_ast__.Definitions.mark ->
  ((< defaultTerms : Shared_ast__.Definitions.yes.. >,
     < defaultTerms : Shared_ast__.Definitions.yes.. >,
     'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval thunk_term : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'b)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'b Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'b) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'b Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval unthunk_term_nobox : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edRemove thunking around an expression (this assumes it's the right form, raises Invalid_argument otherwise)
val make_let_in : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.t
    Catala_utils.Mark.pos ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  Catala_utils.Pos.t ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval make_multiple_let_in : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.var
    Catala_utils.Mark.pos
    list ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  Catala_utils.Pos.t ->
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edval make_tuple : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  'm Shared_ast__.Definitions.mark ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edBuilds a tuple; the mark argument is only used as witness and for position when building 0-uples
val make_tupleaccess : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  int ->
  int ->
  Catala_utils.Pos.t ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edTransformations
val skip_wrappers : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edRemoves surface logging calls and EErrorOnEmpty nodes. Shallow function
val remove_logging_calls : 
  ((< polymorphic : Shared_ast__.Definitions.yes.. > as 'a,
     < polymorphic : Shared_ast__.Definitions.yes.. > as 'a,
     'm)
     Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.edRemoves all calls to Log unary operators in the AST, replacing them by their argument.
val detuplify_application : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr
     Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    list ->
  Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos list ->
  ((('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
     'm Shared_ast__.Definitions.mark)
     Catala_utils.Mark.ed
     list ->
    (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
      'm Shared_ast__.Definitions.mark)
      Catala_utils.Mark.ed) ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.eddetyplify_application args arg_typs mkapp reconstructs a function application using mkapp, but transforming args into its individual tuple elements in the case where arg_typs expects multiple arguments but args is a single tuple
Formatting
val format : 
  Format.formatter ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  unitSimple printing without debug, use Print.expr () instead to follow the command-line debug setting
Analysis and tests
val equal_location : 
  'a Shared_ast__.Definitions.glocation Catala_utils.Mark.pos ->
  'a Shared_ast__.Definitions.glocation Catala_utils.Mark.pos ->
  boolval compare_location : 
  'a Shared_ast__.Definitions.glocation Catala_utils.Mark.pos ->
  'a Shared_ast__.Definitions.glocation Catala_utils.Mark.pos ->
  intval equal : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  boolDetermines if two expressions are equal, omitting their position information
val compare : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  intStandard comparison function, suitable for e.g. Set.Make. Ignores position information
val is_value : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  boolval free_vars : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Var.Set.tval size : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  intUsed by the optimizer to know when to stop
val is_pure : 
  (('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed ->
  boolIf true, the expression is guaranteed not to have any side-effect (logging, possible failure, or debug print)