Module Bonsai_private_base.Computation

module T : sig ... end
module Recursive_scopes : sig ... end
include module type of struct include T end
type ('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 -> 'model
type ('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.t
type ('action, 'model) reset = inject:('action Action.t -> unit Ui_effect.t) -> schedule_event:(unit Ui_effect.t -> unit) -> 'model -> 'model
type ('model, 'action, 'input, 'result, 'extra) info = ('model, 'action, 'input, 'result, 'extra) T.info = {
  1. model : 'model Meta.Model.t;
  2. input : 'input Meta.Input.t;
  3. action : 'action Action.id;
  4. apply_action : ('input, 'action, 'model) apply_action;
  5. run : ('model, 'action, 'input, 'result, 'extra) eval_fun;
  6. reset : ('action, 'model) reset;
  7. may_contain : May_contain.Unresolved.t;
}
type ('result, 'extra) packed_info = ('result, 'extra) T.packed_info =
  1. | T : (_, _, _, 'result, 'extra) info -> ('result, 'extra) packed_info
type 'result t =
  1. | Return : {
    1. value : 'result Value.t;
    2. here : Core.Source_code_position.t;
    } -> 'result t
  2. | Leaf1 : {
    1. model : 'model Meta.Model.t;
    2. input_id : 'input Meta.Input.t;
    3. dynamic_action : 'dynamic_action Core.Type_equal.Id.t;
    4. 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;
    5. reset : inject:('dynamic_action -> unit Ui_effect.t) -> schedule_event:(unit Ui_effect.t -> unit) -> time_source:Ui_time_source.t -> 'model -> 'model;
    6. input : 'input Value.t;
    7. here : Core.Source_code_position.t;
    } -> ('model * ('dynamic_action -> unit Ui_effect.t)) t
  3. | Leaf0 : {
    1. model : 'model Meta.Model.t;
    2. static_action : 'static_action Core.Type_equal.Id.t;
    3. 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;
    4. reset : inject:('static_action -> unit Ui_effect.t) -> schedule_event:(unit Ui_effect.t -> unit) -> time_source:Ui_time_source.t -> 'model -> 'model;
    5. here : Core.Source_code_position.t;
    } -> ('model * ('static_action -> unit Ui_effect.t)) t
  4. | Leaf_incr : {
    1. input : 'input Value.t;
    2. compute : Ui_time_source.t -> 'input Ui_incr.t -> 'result Ui_incr.t;
    3. here : Core.Source_code_position.t;
    } -> 'result t
  5. | Sub : {
    1. from : 'via t;
    2. via : 'via Core.Type_equal.Id.t;
    3. into : 'result t;
    4. invert_lifecycles : bool;
    5. here : Core.Source_code_position.t;
    } -> 'result t
  6. | Store : {
    1. id : 'x Core.Type_equal.Id.t;
    2. value : 'x Value.t;
    3. inner : 'result t;
    4. here : Core.Source_code_position.t;
    } -> 'result t
  7. | Fetch : {
    1. id : 'a Core.Type_equal.Id.t;
    2. default : 'result;
    3. for_some : 'a -> 'result;
    4. here : Core.Source_code_position.t;
    } -> 'result t
  8. | Assoc : {
    1. map : ('k, 'v, 'cmp) Core.Map.t Value.t;
    2. key_comparator : ('k, 'cmp) Core.Comparator.Module.t;
    3. key_id : 'k Core.Type_equal.Id.t;
    4. cmp_id : 'cmp Core.Type_equal.Id.t;
    5. data_id : 'v Core.Type_equal.Id.t;
    6. by : 'result t;
    7. here : Core.Source_code_position.t;
    } -> ('k, 'result, 'cmp) Core.Map.t t
  9. | Assoc_on : {
    1. map : ('io_key, 'v, 'io_cmp) Core.Map.t Value.t;
    2. io_comparator : ('io_key, 'io_cmp) Core.Comparator.Module.t;
    3. model_comparator : ('model_key, 'model_cmp) Core.Comparator.Module.t;
    4. io_key_id : 'io_key Core.Type_equal.Id.t;
    5. io_cmp_id : 'io_cmp Core.Type_equal.Id.t;
    6. model_key_id : 'model_key Core.Type_equal.Id.t;
    7. model_cmp_id : 'model_cmp Core.Type_equal.Id.t;
    8. data_id : 'v Core.Type_equal.Id.t;
    9. by : 'result t;
    10. get_model_key : 'io_key -> 'v -> 'model_key;
    11. here : Core.Source_code_position.t;
    } -> ('io_key, 'result, 'io_cmp) Core.Map.t t
  10. | Assoc_simpl : {
    1. map : ('k, 'v, 'cmp) Core.Map.t Value.t;
    2. by : Path.t -> 'k -> 'v -> 'result;
    3. may_contain : May_contain.Resolved.t;
    4. here : Core.Source_code_position.t;
    } -> ('k, 'result, 'cmp) Core.Map.t t
  11. | Switch : {
    1. match_ : int Value.t;
    2. arms : 'result t Core.Int.Map.t;
    3. here : Core.Source_code_position.t;
    } -> 'result t
  12. | Lazy : {
    1. t : 'result t lazy_t;
    2. here : Core.Source_code_position.t;
    } -> 'result t
  13. | Fix_define : {
    1. fix_id : 'result Fix_id.t;
    2. initial_input : 'input Value.t;
    3. input_id : 'input Core.Type_equal.Id.t;
    4. result : 'result t;
    5. here : Core.Source_code_position.t;
    } -> 'result t
    (*

    Fix_define defines an enclosing "recursive scope", whose body may contain instances of Fix_recurse.

    *)
  14. | Fix_recurse : {
    1. input : 'input Value.t;
    2. input_id : 'input Core.Type_equal.Id.t;
    3. fix_id : 'result Fix_id.t;
    4. here : Core.Source_code_position.t;
    } -> 'result t
    (*

    Fix_recurse is a recursive call to the Fix_define identified by fix_id.

    *)
  15. | Wrap : {
    1. wrapper_model : 'outer_model Meta.Model.t;
    2. result_id : 'result Meta.Input.t;
    3. action_id : 'outer_action Core.Type_equal.Id.t;
    4. inject_id : ('outer_action -> unit Ui_effect.t) Core.Type_equal.Id.t;
    5. model_id : 'outer_model Core.Type_equal.Id.t;
    6. inner : 'result t;
    7. 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;
    8. 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;
    9. here : Core.Source_code_position.t;
    } -> 'result t
  16. | With_model_resetter : {
    1. reset_id : unit Ui_effect.t Core.Type_equal.Id.t;
    2. inner : 'result t;
    3. here : Core.Source_code_position.t;
    } -> 'result t
  17. | Path : {
    1. here : Core.Source_code_position.t;
    } -> Path.t t
  18. | Lifecycle : {
    1. lifecycle : Lifecycle.t option Value.t;
    2. here : Core.Source_code_position.t;
    } -> unit t
  19. | Computation_watcher : {
    1. inner : 'result t;
    2. enable_watcher : bool;
    3. here : Core.Source_code_position.t;
    4. free_vars : Computation_watcher.Type_id_location_map.t;
    5. config : Computation_watcher.Config.t;
    6. queue : Computation_watcher.Output_queue.t option;
    7. 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 t
type 'result gather_fun = recursive_scopes:Recursive_scopes.t -> time_source:Ui_time_source.t -> 'result t -> ('result, unit) packed_info Trampoline.t
val source_code_position : 'result t -> Core.Source_code_position.t