include sig ... endval sexp_of_t : ('a ‑> Sexplib.Sexp.t) ‑> 'a t ‑> Sexplib.Sexp.tval create : ?use_current_scope:bool ‑> 'a ‑> 'a tBy default, a variable is created in Scope.top, on the theory that its value
depends on external stimuli (via Var.set), not on the current scope. However,
in some situations it is useful to supply ~use_current_scope:true to create a
variable that is invalidated when the current scope is invalidated, e.g. if one
wants to use on_update (watch var) ~f:(function Invalidated -> ... | ...) to
remove the external stimulus that was setting var.
It is allowed to do let t = create a during stabilization; for that
stabilization, watch t will have value a.
val set : 'a t ‑> 'a ‑> unitset t a sets the value of t to a. Outside of stabilization, subsequent
calls to Var.value t will see a, but the set will not have any effect on
incrementals until the next stabilization, at which point watch t will take on
whatever value t was at the start of stabilization, causing incremental
recomputation as usual.
During a stabilization, calling set will behave as if set was called after
stabilization finished: the new value will not be seen (by value v or watch v)
until after the stabilization finishes.
val watch : 'a t ‑> 'a incrementalwatch t returns an incremental that tracks the value of t. For a given t,
all calls to watch t return the same incremental.
val latest_value : 'a t ‑> 'alatest_value t returns the value most recently set for t. It can differ
from value t only during stabilization.