Module Make.Expert
module Snapshot : Bonsai__.Snapshot.S with module Event := EventThe underlying representations of Bonsai components. This module is provided "as is", without warranty of any kind, express or implied...
type ('input, 'model, 'action, 'result) unpackedunpackedexposes the action type of a component as an existential.
type ('input, 'model, 'result) t= private|T : ('input, 'model, 'action, 'result) unpacked * 'action Core_kernel.Type_equal.Id.t -> ('input, 'model, 'result) tEvery Bonsai component has a hidden
'actiontype, which can be revealed as an existential by pattern matching ont.
val reveal : ('input, 'model, 'result) nonexpert_t -> ('input, 'model, 'result) treveal tis just the identity, but it allows you to pattern match on the GADT to get the unpacked component (which you caneval) and the action's type ID.
val conceal : ('input, 'model, 'result) t -> ('input, 'model, 'result) nonexpert_tconcealis the inverse ofreveal.
val of_full : f:(input:'input Incr.t -> old_model:'model option Incr.t -> model:'model Incr.t -> inject:('action -> Event.t) -> ('model, 'action, 'result) Snapshot.t Incr.t) -> action_type_id:'action Core_kernel.Type_equal.Id.t -> ('input, 'model, 'result) tBuilds a component out of the incremental function from
'model Incr.ttoSnapshot.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 meansoptimizecannot do anything with it, for example.
val eval : input:'input Incr.t -> old_model:'model option Incr.t -> model:'model Incr.t -> inject:('action -> Event.t) -> action_type_id:'action Core_kernel.Type_equal.Id.t -> ('input, 'model, 'action, 'result) unpacked -> ('model, 'action, 'result) Snapshot.t Incr.tWalks the component tree and builds a
Snapshot.t Incr.twhich will be recomputed whenmodelandold_modelchange.
val optimize : ('input, 'model, 'result) t -> ('input, 'model, 'result) tPerforms 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_fullandeval).