Bonsai_private_base.Computationmodule T : sig ... endmodule Recursive_scopes : sig ... endinclude module type of struct include T endtype ('input, 'action, 'model) apply_action =
inject:('action Action.t -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
'input option ->
'model ->
'action Action.t ->
'modeltype ('model, 'action, 'input, 'result, 'extra) eval_fun =
environment:Environment.t ->
fix_envs:Environment.Recursive.t ->
path:Path.t ->
model:'model Ui_incr.t ->
inject:('action Action.t -> unit Ui_effect.t) ->
(('model, 'input, 'result) Snapshot.t * 'extra) Trampoline.ttype ('action, 'model) reset =
inject:('action Action.t -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
'model ->
'modeltype ('model, 'action, 'input, 'result, 'extra) info =
('model, 'action, 'input, 'result, 'extra) T.info =
{model : 'model Meta.Model.t;input : 'input Meta.Input.t;action : 'action Action.id;apply_action : ('input, 'action, 'model) apply_action;run : ('model, 'action, 'input, 'result, 'extra) eval_fun;reset : ('action, 'model) reset;may_contain : May_contain.Unresolved.t;}type ('result, 'extra) packed_info = ('result, 'extra) T.packed_info = | T : (_, _, _, 'result, 'extra) info -> ('result, 'extra) packed_infotype 'result t = | Return : {value : 'result Value.t;here : Core.Source_code_position.t;} -> 'result t| Leaf1 : {model : 'model Meta.Model.t;input_id : 'input Meta.Input.t;dynamic_action : 'dynamic_action Core.Type_equal.Id.t;apply_action : inject:('dynamic_action -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
time_source:Ui_time_source.t ->
'input option ->
'model ->
'dynamic_action ->
'model;reset : inject:('dynamic_action -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
time_source:Ui_time_source.t ->
'model ->
'model;input : 'input Value.t;here : Core.Source_code_position.t;} -> ('model * ('dynamic_action -> unit Ui_effect.t)) t| Leaf0 : {model : 'model Meta.Model.t;static_action : 'static_action Core.Type_equal.Id.t;apply_action : inject:('static_action -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
time_source:Ui_time_source.t ->
'model ->
'static_action ->
'model;reset : inject:('static_action -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
time_source:Ui_time_source.t ->
'model ->
'model;here : Core.Source_code_position.t;} -> ('model * ('static_action -> unit Ui_effect.t)) t| Leaf_incr : {input : 'input Value.t;compute : Ui_time_source.t -> 'input Ui_incr.t -> 'result Ui_incr.t;here : Core.Source_code_position.t;} -> 'result t| Sub : {from : 'via t;via : 'via Core.Type_equal.Id.t;into : 'result t;invert_lifecycles : bool;here : Core.Source_code_position.t;} -> 'result t| Store : {id : 'x Core.Type_equal.Id.t;value : 'x Value.t;inner : 'result t;here : Core.Source_code_position.t;} -> 'result t| Fetch : {id : 'a Core.Type_equal.Id.t;default : 'result;for_some : 'a -> 'result;here : Core.Source_code_position.t;} -> 'result t| Assoc : {map : ('k, 'v, 'cmp) Core.Map.t Value.t;key_comparator : ('k, 'cmp) Core.Comparator.Module.t;key_id : 'k Core.Type_equal.Id.t;cmp_id : 'cmp Core.Type_equal.Id.t;data_id : 'v Core.Type_equal.Id.t;by : 'result t;here : Core.Source_code_position.t;} -> ('k, 'result, 'cmp) Core.Map.t t| Assoc_on : {map : ('io_key, 'v, 'io_cmp) Core.Map.t Value.t;io_comparator : ('io_key, 'io_cmp) Core.Comparator.Module.t;model_comparator : ('model_key, 'model_cmp) Core.Comparator.Module.t;io_key_id : 'io_key Core.Type_equal.Id.t;io_cmp_id : 'io_cmp Core.Type_equal.Id.t;model_key_id : 'model_key Core.Type_equal.Id.t;model_cmp_id : 'model_cmp Core.Type_equal.Id.t;data_id : 'v Core.Type_equal.Id.t;by : 'result t;get_model_key : 'io_key -> 'v -> 'model_key;here : Core.Source_code_position.t;} -> ('io_key, 'result, 'io_cmp) Core.Map.t t| Assoc_simpl : {map : ('k, 'v, 'cmp) Core.Map.t Value.t;by : Path.t -> 'k -> 'v -> 'result;may_contain : May_contain.Resolved.t;here : Core.Source_code_position.t;} -> ('k, 'result, 'cmp) Core.Map.t t| Switch : {match_ : int Value.t;arms : 'result t Core.Int.Map.t;here : Core.Source_code_position.t;} -> 'result t| Lazy : {t : 'result t lazy_t;here : Core.Source_code_position.t;} -> 'result t| Fix_define : {fix_id : 'result Fix_id.t;initial_input : 'input Value.t;input_id : 'input Core.Type_equal.Id.t;result : 'result t;here : Core.Source_code_position.t;} -> 'result tFix_define defines an enclosing "recursive scope", whose body may contain instances of Fix_recurse.
| Fix_recurse : {input : 'input Value.t;input_id : 'input Core.Type_equal.Id.t;fix_id : 'result Fix_id.t;here : Core.Source_code_position.t;} -> 'result tFix_recurse is a recursive call to the Fix_define identified by fix_id.
| Wrap : {wrapper_model : 'outer_model Meta.Model.t;result_id : 'result Meta.Input.t;action_id : 'outer_action Core.Type_equal.Id.t;inject_id : ('outer_action -> unit Ui_effect.t) Core.Type_equal.Id.t;model_id : 'outer_model Core.Type_equal.Id.t;inner : 'result t;dynamic_apply_action : inject:('outer_action -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
time_source:Ui_time_source.t ->
'result option ->
'outer_model ->
'outer_action ->
'outer_model;reset : inject:('outer_action -> unit Ui_effect.t) ->
schedule_event:(unit Ui_effect.t -> unit) ->
time_source:Ui_time_source.t ->
'outer_model ->
'outer_model;here : Core.Source_code_position.t;} -> 'result t| With_model_resetter : {reset_id : unit Ui_effect.t Core.Type_equal.Id.t;inner : 'result t;here : Core.Source_code_position.t;} -> 'result t| Path : {here : Core.Source_code_position.t;} -> Path.t t| Lifecycle : {lifecycle : Lifecycle.t option Value.t;here : Core.Source_code_position.t;} -> unit t| Computation_watcher : {inner : 'result t;enable_watcher : bool;here : Core.Source_code_position.t;free_vars : Computation_watcher.Type_id_location_map.t;config : Computation_watcher.Config.t;queue : Computation_watcher.Output_queue.t option;value_id_observation_definition_positions : (Computation_watcher.Source_code_positions.finalized
Computation_watcher.Source_code_positions.t
* Computation_watcher.Config.t)
Computation_watcher.Id_location_hashmap.t
option;} -> 'result ttype 'result gather_fun =
recursive_scopes:Recursive_scopes.t ->
time_source:Ui_time_source.t ->
'result t ->
('result, unit) packed_info Trampoline.tval source_code_position : 'result t -> Core.Source_code_position.t