A library for building dynamic webapps, using Js_of_ocaml
Module type
Class type
Library bonsai
type 'a t
val create : ?sexp_of:( 'a -> Core.Sexp.t ) -> name:string -> fallback:'a -> unit -> 'a t

Creates a new variable for use with the rest of the functions. It is critically important that the exact same Dynamic_scope.t is used in calls to set_within and the corresponding lookup*.

val derived : ?sexp_of:( 'a -> Core.Sexp.t ) -> 'b t -> get:( 'b -> 'a ) -> set:( 'b -> 'a -> 'b ) -> 'a t

Creates a variable which is derived from another. Typically this is used to project out a field of another dynamic variable which contains a record.

val set : 'a t -> 'a Value.t -> inside:'r Computation.t -> 'r Computation.t

Given a 'a Dynamic_scope.t and a 'a Value.t evaluate a function whose resulting Computation.t has access to the value via the lookup function.

type revert = {
revert : 'a. 'a Computation.t -> 'a Computation.t;
val set' : 'a t -> 'a Value.t -> f:( revert -> 'r Computation.t ) -> 'r Computation.t

like set but with the ability to revert the value in sub-computations.

val lookup : 'a t -> 'a Computation.t

Lookup attempts to find the value inside the nearest scope, but if there isn't one, it falls back to default specified in create.

val modify : 'a t -> change:( 'a Value.t -> 'a Value.t ) -> f:( revert -> 'r Computation.t ) -> 'r Computation.t