Desugared.AstAbstract syntax tree of the desugared representation
module ScopeDef : sig ... endInside a scope, a definition can refer to a variable (possibly an intermediate state thereof) or an input of a subscope.
module AssertionName :
Catala_utils.Uid.Id with type info = Catala_utils.Uid.MarkedString.infotype expr = (Shared_ast.desugared, Shared_ast.untyped) Shared_ast.gexprSee Shared_ast.naked_gexpr for the complete definition
type location = Shared_ast.desugared Shared_ast.glocationmodule ExprMap : Catala_utils.Map.S with type key = exprtype exception_situation = | BaseCase| ExceptionToLabel of Shared_ast.LabelName.t Catala_utils.Mark.pos| ExceptionToRule of Shared_ast.RuleName.t Catala_utils.Mark.postype label_situation = | ExplicitlyLabeled of Shared_ast.LabelName.t Catala_utils.Mark.pos| Unlabeledtype rule = {rule_id : Shared_ast.RuleName.t;rule_just : expr Shared_ast.boxed;rule_cons : expr Shared_ast.boxed;rule_parameter : (expr Shared_ast.Var.t Catala_utils.Mark.pos * Shared_ast.typ)
list
Catala_utils.Mark.pos
option;rule_exception : exception_situation;rule_label : label_situation;}val empty_rule :
Catala_utils.Pos.t ->
(Catala_utils.Uid.MarkedString.info * Shared_ast.typ) list
Catala_utils.Mark.pos
option ->
ruleval always_false_rule :
Catala_utils.Pos.t ->
(Catala_utils.Uid.MarkedString.info * Shared_ast.typ) list
Catala_utils.Mark.pos
option ->
ruletype assertion = expr Shared_ast.boxedtype meta_assertion = | FixedBy of reference_typ Catala_utils.Mark.pos| VariesWith of unit * variation_typ Catala_utils.Mark.pos optiontype io = {io_output : bool Catala_utils.Mark.pos;true is present in the output of the scope.
io_input : Catala_runtime.io_input Catala_utils.Mark.pos;}Characterization of the input/output status of a scope variable.
type scope_def = {scope_def_rules : rule Shared_ast.RuleName.Map.t;empty outside of the root module
*)scope_def_typ : Shared_ast.typ;scope_def_parameters : (Catala_utils.Uid.MarkedString.info * Shared_ast.typ)
list
Catala_utils.Mark.pos
option;scope_def_is_condition : bool;scope_def_io : io;}type scope = {scope_vars : var_or_states Shared_ast.ScopeVar.Map.t;scope_sub_scopes : Shared_ast.ScopeName.t Shared_ast.ScopeVar.Map.t;scope_uid : Shared_ast.ScopeName.t;scope_defs : scope_def ScopeDef.Map.t;scope_assertions : assertion AssertionName.Map.t;empty outside of the root module
*)scope_options : catala_option Catala_utils.Mark.pos list;scope_meta_assertions : meta_assertion list;scope_visibility : Shared_ast.visibility;}type topdef = {topdef_expr : expr option;Always None outside of the root module
topdef_type : Shared_ast.typ;topdef_arg_names : string Catala_utils.Mark.pos list;topdef_visibility : Shared_ast.visibility;Necessarily Public outside of the root module (unless in whole_program mode)
topdef_external : bool;}type modul = {module_scopes : scope Shared_ast.ScopeName.Map.t;module_topdefs : topdef Shared_ast.TopdefName.Map.t;}type program = {program_module_name : (Shared_ast.ModuleName.t * Shared_ast.module_intf_id)
option;program_ctx : Shared_ast.decl_ctx;program_modules : modul Shared_ast.ModuleName.Map.t;Contains all submodules of the program, in a flattened structure
*)program_root : modul;program_lang : Catala_utils.Global.backend_lang;}module Hash : sig ... endThese hashes are computed on interfaces: only signatures are considered.
val locations_used : expr -> LocationSet.tval free_variables :
rule Shared_ast.RuleName.Map.t ->
Catala_utils.Pos.t ScopeDef.Map.t