Shared_ast.Program
val 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_ctx
val 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.program
Maps 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.program
If 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 ->
'a
val 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_body
val 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.mark
Raises 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.program
val 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.boxed
Usage: 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) list
Returns a list of used modules, in topological order