Bonsai.Dynamic_scopeThis module implements dynamic variable scoping. Once a dynamic variable is created, you can store values in it, and lookup those same values. A lookup will find the nearest-most parent "unreverted" set call where a "set" can be "reverted" with set''s revert.
type 'a bonsai_t := 'a tval create :
?sexp_of:('a -> Core.Sexp.t) ->
name:string ->
fallback:'a ->
unit ->
'a tCreates 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 and the corresponding lookup.
val derived :
?sexp_of:('a -> Core.Sexp.t) ->
'b t ->
get:('b -> 'a) ->
set:('b -> 'a -> 'b) ->
'a tCreates 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 :
here:lexing_position ->
'a t ->
'a bonsai_t ->
inside:(graph @ local -> 'r bonsai_t) ->
graph @ local ->
'r bonsai_tGiven a 'a Dynamic_scope.t and a 'a Bonsai.t evaluate the ~inside function that now has access to the value via the lookup function.
val set' :
here:lexing_position ->
'a t ->
'a bonsai_t ->
f:(revert -> graph @ local -> 'r bonsai_t) ->
graph @ local ->
'r bonsai_tlike set but with the ability to revert the value in sub-computations.
Lookup attempts to find the value inside the nearest scope, but if there isn't one, it falls back to default specified in create.