Module Shared_ast.Interpreter

Reference interpreter for the default calculus

val evaluate_operator : (((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : _ ; custom : _ > as 'a, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : _ ; custom : _ > 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, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed) -> 'a Shared_ast__.Definitions.Op.t Catala_utils.Mark.pos -> 'm Shared_ast__.Definitions.mark -> Catala_utils.Global.backend_lang -> (('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.ed

Evaluates the result of applying the given operator to the given arguments, which are expected to be already reduced to values. The first argument is used to evaluate expressions and called when reducing e.g. the map operator.

val evaluate_expr : Shared_ast__.Definitions.decl_ctx -> Catala_utils.Global.backend_lang -> ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : _ >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : _ >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed -> ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : Shared_ast__.Definitions.yes >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : Shared_ast__.Definitions.yes >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed

Evaluates an expression according to the semantics of the default calculus.

val interpret_program_dcalc : ((< monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.no >, < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.no >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed Shared_ast__.Definitions.program -> Shared_ast__.Definitions.ScopeName.t -> (Catala_utils.Uid.MarkedString.info * ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.yes >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.yes >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed) list

Interprets a program. This function expects an expression typed as a function whose argument are all thunked. The function is executed by providing for each argument a thunked empty default. Returns a list of all the computed values for the scope variables of the executed scope.

val interpret_program_dcalc_with_coverage : ?stdlib:Catala_utils.Global.raw_file -> ((< monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.no >, < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.no >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed Shared_ast__.Definitions.program -> Shared_ast__.Definitions.ScopeName.t -> (Catala_utils.Uid.MarkedString.info * ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.yes >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : Shared_ast__.Definitions.yes ; custom : Shared_ast__.Definitions.yes >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed) list * Coverage.coverage_map

Same as interpret_program_dcalc but also computes and returns the coverage map of the given program. If stdlib is provided, all positions that refers to it will be discarded.

val interpret_program_lcalc : ((< monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes ; defaultTerms : Shared_ast__.Definitions.no ; custom : Shared_ast__.Definitions.no >, < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes ; defaultTerms : Shared_ast__.Definitions.no ; custom : Shared_ast__.Definitions.no >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed Shared_ast__.Definitions.program -> Shared_ast__.Definitions.ScopeName.t -> (Catala_utils.Uid.MarkedString.info * ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : Shared_ast__.Definitions.no ; custom : Shared_ast__.Definitions.yes >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : Shared_ast__.Definitions.no ; custom : Shared_ast__.Definitions.yes >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed) list

Interprets a program. This function expects an expression typed as a function whose argument are all thunked. The function is executed by providing for each argument a thunked empty default. Returns a list of all the computed values for the scope variables of the executed scope.

val addcustom : ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : 'b >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : 'b >, 't) Shared_ast__.Definitions.base_gexpr, 't Shared_ast__.Definitions.mark) Catala_utils.Mark.ed -> ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : Shared_ast__.Definitions.yes >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : Shared_ast__.Definitions.yes >, 't) Shared_ast__.Definitions.base_gexpr, 't Shared_ast__.Definitions.mark) Catala_utils.Mark.ed

Add custom terms to the AST type.

val delcustom : ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : 'b >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : 'b >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed -> ((< < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : Shared_ast__.Definitions.no >, < < monomorphic : Shared_ast__.Definitions.yes ; polymorphic : Shared_ast__.Definitions.yes ; overloaded : Shared_ast__.Definitions.no ; resolved : Shared_ast__.Definitions.yes ; syntacticNames : Shared_ast__.Definitions.no ; scopeVarStates : Shared_ast__.Definitions.no ; scopeVarSimpl : Shared_ast__.Definitions.no ; explicitScopes : Shared_ast__.Definitions.no ; assertions : Shared_ast__.Definitions.yes > ; defaultTerms : 'a ; custom : Shared_ast__.Definitions.no >, 'm) Shared_ast__.Definitions.base_gexpr, 'm Shared_ast__.Definitions.mark) Catala_utils.Mark.ed

Runtime check that the term contains no custom terms (raises Invalid_argument if that is the case

val load_runtime_modules : hashf:(Catala_utils.Hash.t -> Catala_utils.Hash.full) -> _ Shared_ast__.Definitions.program -> unit

Dynlink the runtime modules required by the given program, in order to make them callable by the interpreter. This function is affected by Global.options.bin_dir. Note: in whole-program, we will only try loading external modules.