Shared_ast.Programval map_decl_ctx : 
  f:
    (Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
      Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos) ->
  Shared_ast__.Definitions.decl_ctx ->
  Shared_ast__.Definitions.decl_ctxval map_scopes_env : 
  f:
    ('acc ->
      ('e Shared_ast__.Definitions.boxed -> 'e Shared_ast__.Definitions.boxed) ->
      Shared_ast__.Definitions.ScopeName.t ->
      'e Shared_ast__.Definitions.scope_body ->
      'acc * 'e Shared_ast__.Definitions.scope_body Bindlib.box) ->
  ?last:
    ('acc ->
      ('e Shared_ast__.Definitions.boxed -> 'e Shared_ast__.Definitions.boxed) ->
      (Shared_ast__.Definitions.code_export_kind * 'e) list ->
      (Shared_ast__.Definitions.code_export_kind * 'e) list Bindlib.box) ->
  init:'acc ->
  'e Shared_ast__.Definitions.program ->
  'e Shared_ast__.Definitions.programMaps on the scopes in the program, passing along an "environment" in the form of a function binding all toplevel and scope definitions to their variables in the argument expression
val map_exprs : 
  ?typ:
    (Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
      Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos) ->
  f:('expr1 -> 'expr2 Shared_ast__.Definitions.boxed) ->
  varf:('expr1 Var.t -> 'expr2 Var.t) ->
  'expr1 Shared_ast__.Definitions.program ->
  'expr2 Shared_ast__.Definitions.programIf typ is specified, definitions in decl_ctx are also processed
val fold_exprs : 
  f:
    ('a ->
      'expr ->
      Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
      'a) ->
  init:'a ->
  'expr Shared_ast__.Definitions.program ->
  'aval get_scope_body : 
  (((_ Shared_ast__.Definitions.any, _ Shared_ast__.Definitions.any, 't)
      Shared_ast__.Definitions.base_gexpr,
     't Shared_ast__.Definitions.mark)
     Catala_utils.Mark.ed as 'e)
    Shared_ast__.Definitions.program ->
  Shared_ast__.Definitions.ScopeName.t ->
  'e Shared_ast__.Definitions.scope_bodyval get_mark_witness : 
  ((_ Shared_ast__.Definitions.any, _ Shared_ast__.Definitions.any, 'm)
     Shared_ast__.Definitions.base_gexpr,
    'm Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Shared_ast__.Definitions.program ->
  'm Shared_ast__.Definitions.markRaises Not_found on an empty program
val untype : 
  (('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, _)
     Shared_ast__.Definitions.base_gexpr,
    _ Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Shared_ast__.Definitions.program ->
  (('a, 'a, Shared_ast__.Definitions.untyped)
     Shared_ast__.Definitions.base_gexpr,
    Shared_ast__.Definitions.untyped Shared_ast__.Definitions.mark)
    Catala_utils.Mark.ed
    Shared_ast__.Definitions.programval to_expr : 
  (((_ Shared_ast__.Definitions.any, _ Shared_ast__.Definitions.any, _)
      Shared_ast__.Definitions.base_gexpr,
     _ Shared_ast__.Definitions.mark)
     Catala_utils.Mark.ed as 'e)
    Shared_ast__.Definitions.program ->
  Shared_ast__.Definitions.ScopeName.t ->
  'e Shared_ast__.Definitions.boxedUsage: build_whole_program_expr program main_scope builds an expression corresponding to the main program and returning the main scope as a function.
val modules_to_list : 
  Shared_ast__.Definitions.module_tree_node Catala_utils.Uid.Module.Map.t ->
  (Catala_utils.Uid.Module.t * Shared_ast__.Definitions.module_intf_id) listReturns a list of used modules, in topological order