Runtime_ocaml.Runtime
The OCaml runtime.
module Eoption : sig ... end
type io_input =
| NoInput
For an internal variable defined only in the scope, and does not appear in the input.
*)| OnlyInput
For variables that should not be redefined in the scope, because they appear in the input.
*)| Reentrant
For variables defined in the scope that can also be redefined by the caller as they appear in the input.
*)This type characterizes the three levels of visibility for a given scope variable with regards to the scope's input and possible redefinitions inside the scope.
type error =
| AssertionFailed
An assertion in the program doesn't hold
*)| NoValue
No computation with valid conditions found
*)| Conflict
Two different valid computations at that point
*)| DivisionByZero
The denominator happened to be 0 here
*)| ListEmpty
Element access on an empty list
*)| NotSameLength
Traversing multiple lists of different lengths
*)| UncomparableDurations
Comparing durations in different units (e.g. months vs. days)
*)| AmbiguousDateRounding
ambiguous date computation, and rounding mode was not specified
*)| IndivisibleDurations
Dividing durations that are not in days
*)val error_to_string : error -> string
Returns the capitalized tag of the error as a string
val error_message : error -> string
Returns a short explanation message about the error
exception Error of error * source_position list
type runtime_value =
| Unit
| Bool of bool
| Money of money
| Integer of integer
| Decimal of decimal
| Date of date
| Duration of duration
| Enum of string * string * runtime_value
| Struct of string * (string * runtime_value) list
| Array of runtime_value Stdlib.Array.t
| Tuple of runtime_value Stdlib.Array.t
| Unembeddable
val unembeddable : 'a -> runtime_value
val embed_unit : unit -> runtime_value
val embed_bool : bool -> runtime_value
val embed_money : money -> runtime_value
val embed_integer : integer -> runtime_value
val embed_decimal : decimal -> runtime_value
val embed_date : date -> runtime_value
val embed_duration : duration -> runtime_value
val embed_array : ('a -> runtime_value) -> 'a Stdlib.Array.t -> runtime_value
The logging is constituted of two phases:
raw_event
) during the program execution (see retrieve_log
) throught Logging instruments.event
).Represents information about a name in the code -- i.e. variable name, subscope name, etc...
It's a list of strings with a length varying from 2 to 3, where:
Scope_name
,a_subscope_var.input_var
Subscope_name
or, the input
(resp. output
) string -- which corresponds to the input (resp. the output) of a function.type raw_event =
| BeginCall of information
Subscope or function call.
*)| EndCall of information
End of a subscope or a function call.
*)| VariableDefinition of information * io_log * runtime_value
Definition of a variable or a function argument.
*)| DecisionTaken of source_position
Source code position of an event.
*)The corresponding grammar of the event
type, is the following:
<event> := <fun_call> | <subscope_call> | <var_def> | <var_def_with_fun> | VariableDefinition <fun_call> := VariableDefinition (function input) <fun_call_beg> <event>* (<var_def> | <var_def_with_fun>) (function output) EndCall <var_def_with_fun> := /-- DecisionTaken pos of | <fun_call>+ (function calls needed to compute the variable value) \-> VariableDefinition <subscope_call> := <sub_var_def>* (sub-scope attributes def) <sub_call_beg> <event>+ EndCall <var_def> := DecisionTaken VariableDefinition(info, _) (when info.length = 2 && info[1] == "id") <sub_var_def> := DecisionTaken VariableDefinition(info, _) (when info.length = 3) <fun_call_beg> := BeginCall(info) (when info.length = 2) <sub_call_beg> := BeginCall(info) (when info.length = 2 and '.' in info[1])
type event =
| VarComputation of var_def
| FunCall of fun_call
| SubScopeCall of {
name : information;
inputs : var_def list;
body : event list;
}
and var_def = {
pos : source_position option;
name : information;
io : io_log;
value : runtime_value;
fun_calls : fun_call list option;
}
and fun_call = {
fun_name : information;
fun_inputs : var_def list;
body : event list;
output : var_def;
}
retrieve_log ()
returns the current list of collected raw_event
.
module EventParser : sig ... end
val log_variable_definition :
string list ->
io_log ->
('a -> runtime_value) ->
'a ->
'a
val log_decision_taken : source_position -> bool -> bool
module Json : sig ... end
pp_events ~is_first_call ppf events
pretty prints in ppf
the string representation of events
.
If is_first_call
is set to true, the formatter will be flush at the end. By default, is_first_call
is set to false.
This helper function rounds a rational to the nearest integer. Tie-breaker is the "half away from zero" rule: 0.5
is rounded to 1.0
and -0.5
is rounded to -1.0
. This function shall be used anytime rounding is necessary.
val money_of_cents_string : string -> money
val money_of_units_int : int -> money
val money_to_float : money -> float
val money_to_string : money -> string
val decimal_of_string : string -> decimal
val decimal_to_string : max_prec_digits:int -> decimal -> string
val decimal_of_float : float -> decimal
val decimal_to_float : decimal -> float
val integer_of_string : string -> integer
val integer_to_string : integer -> string
val integer_to_int : integer -> int
val integer_of_int : int -> integer
val integer_log2 : integer -> int
val date_to_string : date -> string
val date_of_numbers : int -> int -> int -> date
Usage: date_of_numbers year month day
.
val date_to_years_months_days : date -> int * int * int
val duration_of_numbers : int -> int -> int -> duration
Usage : duration_of_numbers year mounth day
.
val duration_to_years_months_days : duration -> int * int * int
val duration_to_string : duration -> string
val handle_exceptions :
('a * source_position) Eoption.t array ->
('a * source_position) Eoption.t
module Oper : sig ... end
include module type of Oper
val o_length : 'a array -> integer
val o_eq : 'a -> 'a -> bool
val o_map2 :
source_position ->
('a -> 'b -> 'c) ->
'a array ->
'b array ->
'c array
val o_reduce : ('a -> 'a -> 'a) -> (unit -> 'a) -> 'a array -> 'a
val o_filter : ('a -> bool) -> 'a array -> 'a array
val o_add_dat_dur :
date_rounding ->
source_position ->
date ->
duration ->
date
val o_sub_dat_dur :
date_rounding ->
source_position ->
date ->
duration ->
date
val o_div_int_int : source_position -> integer -> integer -> decimal
val o_div_rat_rat : source_position -> decimal -> decimal -> decimal
val o_div_mon_mon : source_position -> money -> money -> decimal
val o_div_mon_int : source_position -> money -> integer -> money
val o_div_mon_rat : source_position -> money -> decimal -> money
val o_div_dur_dur : source_position -> duration -> duration -> decimal
val o_lt_dur_dur : source_position -> duration -> duration -> bool
val o_lte_dur_dur : source_position -> duration -> duration -> bool
val o_gt_dur_dur : source_position -> duration -> duration -> bool
val o_gte_dur_dur : source_position -> duration -> duration -> bool
val o_eq_dur_dur : source_position -> duration -> duration -> bool
Modules API
Registers a module by the given name defining the given bindings. Required for evaluation to be able to access the given values. The last argument is expected to be a hash of the source file and the Catala version, and will in time be used to ensure that the module and the interface are in sync
Returns Ok
if it has been registered with the correct hash, Error h
if there is a hash mismatch.