package bonsai

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

The underlying representations of Bonsai components. This module is provided "as is", without warranty of any kind, express or implied...

type ('input, 'model, 'action, 'result, 'incr, 'event) unpacked

unpacked exposes the action type of a component as an existential.

type ('input, 'result, 'incr, 'event) t = private
  1. | T : {
    1. unpacked : ('input, 'model, 'action, 'result, 'incr, 'event) unpacked;
    2. action_type_id : 'action Core_kernel.Type_equal.Id.t;
    3. model : 'model Bonsai_types.Packed.model_info;
    } -> ('input, 'result, 'incr, 'event) t

Every Bonsai component has a hidden 'action type, which can be revealed as an existential by pattern matching on t.

val reveal : ('input, 'result, 'incr, 'event) nonexpert_t -> ('input, 'result, 'incr, 'event) t

reveal t is just the identity, but it allows you to pattern match on the GADT to get the unpacked component (which you can eval) and the action's type ID.

val conceal : ('input, 'result, 'incr, 'event) t -> ('input, 'result, 'incr, 'event) nonexpert_t

conceal is the inverse of reveal.

val of_full : Core_kernel.Source_code_position.t -> f: (input:('input, 'incr) Incremental.t -> old_model:('model option, 'incr) Incremental.t -> model:('model, 'incr) Incremental.t -> inject:('action -> 'event) -> environment:'incr Bonsai_types.Environment.t -> incr_state:'incr Incremental.State.t -> (('model, 'action, 'result, 'event) Bonsai_types.Snapshot.t, 'incr) Incremental.t) -> action_type_id:'action Core_kernel.Type_equal.Id.t -> model_type_id:'model Core_kernel.Type_equal.Id.t -> default_model:'model -> model_equal:('model -> 'model -> bool) -> sexp_of_model:('model -> Core_kernel.Sexp.t) -> model_of_sexp:(Core_kernel.Sexp.t -> 'model) -> ('input, 'result, 'incr, 'event) t

Builds a component out of the incremental function from 'model Incr.t to Snapshot.t Incr.t. This function is in the expert module because it is effectively a black box to the rest of the Bonsai library, which means optimize cannot do anything with it, for example.

val eval : input:('input, 'incr) Incremental.t -> old_model:('model option, 'incr) Incremental.t -> model:('model, 'incr) Incremental.t -> inject:('action -> 'event) -> action_type_id:'action Core_kernel.Type_equal.Id.t -> environment:'incr Bonsai_types.Environment.t -> incr_state:'incr Incremental.State.t -> ('input, 'model, 'action, 'result, 'incr, 'event) unpacked -> (('model, 'action, 'result, 'event) Bonsai_types.Snapshot.t, 'incr) Incremental.t

Walks the component tree and builds a Snapshot.t Incr.t which will be recomputed when model and old_model change.

val optimize : ('input, 'result, 'incr, 'event) t -> ('input, 'result, 'incr, 'event) t

Performs constant-folding and other optimizations on the component tree. This function is called once-per-component tree, which should be roughly once-per-application life-cycle unless there is dynamic component tree creation going on (perhaps via of_full and eval).

module Snapshot = Bonsai_types.Snapshot