Note.SSignals.
A signal is a value that varies continuously over time. It has a value at every point in time.
type 'a t = 'a signalThe type for signals of type 'a.
type 'a set = ?step:Step.t -> 'a -> unitThe type for functions setting signal values of type 'a. See create.
log ?now s f is Logr.(create ~now (const f $ obs s)).
create v is a primitive signal set to the value v and a set function. The function set is such that:
set v sets the signal's value to v at the time it is called.set ~step v sets the signal value to v at the time it is called and schedules an update at time step.Warning. set must not be used in the definition of signals or events.
val eq : 'a signal -> 'a -> 'a -> booleq s is s's equality function.
with_eq eq s is s with equality function eq.
val value : 'a signal -> 'avalue s is the current value of s, [s]t
val rough_value : 'a signal -> 'arough_value s is the current value of s, but in contrast to value it might not be exactly [s]t.
val const : ?eq:('a -> 'a -> bool) -> 'a -> 'a signalconst v is always v, [const v]t = v.
hold i e has the value of e's last occurrence or the value of i provides the signal value at creation time if there's no event at that time.
hold i e]t = i if [e]<=t = Nonehold i e]t = v if [e]<=t = Some vbind s f is the signal that results from applying f to s, [bind s f]t = [f[s]t]t.
swap s se is join (hold ~eq:( == ) s se) that is the values of s followed by values of the last signal that occured on se.
changes s occurs with the value of s whenever it changes.
changes s]t = Some v if [s]t = v and [s]t-dt = v' and eq v v' = false.changes s]t = None otherwise.Warning. By definition no event occurs if s changes at creation time (0 - dt is undefined).
map f s is s transformed by f, [map f s]t = f [s]t.
app sf s holds the value of sf applied to the value of s, [app sf s]t = [sf]t [s]t.
sample s ~on f samples s at e's occurrences.
sample s ~on f]t = Some (f sv ev) if [on]t = Some ev and [s]t = sv.sample s ~on f]t = None otherwise.sample_filter s on f is E.Option.on_some (sample s ~on f).
snapshot ~on s is sample (fun v _ -> v) ~on s.
TODO. Candidate for deletion.
accum i e is hold i (E.accum i e).
until ~limit ~init ~next s is s until next occurs, after which the value s had just before (limit is false, default) or whenever next occurs (limit is true) is kept forever.
until ~limit ~init ~next s]t = [s]t if [next]<=t = Noneuntil ~limit ~init ~next s]t = init if [next]0 = Some _until ~limit:false ~init ~next s]t = [s]t'- dt if [next]t' = Some _ and [next]<t' = None.until ~limit:true ~init ~next s]t = [s]t' if [next]t' = Some _ and [next]<t' = None.init defaults to value s.
follow ~init s ~on is s whenever on is true and the last value of s when on was true if on is false. If on is false at creation time init is used (defaults to S.value
s).
follow ~init s ~on]0 = [s]0 if [on]0 = truefollow ~init s ~on]0 = [init]0 if [on]0 = falsefollow ~init s ~on]t = [s]t if [on]t = truefollow ~init s ~on]t = [follow ~init s ~on]t' if [on]t = false where t' is the greatest t' < t with [on]t' = true or 0 if there is no such time.defer s is s delayed by an infinitesimal amount of time. At creation time init is used (defaults to S.value s).
defer s]t = init for t = 0.defer s]t = [s]t-dt otherwise.delay i (lazy s) is the value s had an infinitesimal amount of time before:
delay i (lazy s)]t = i for t = 0.delay i (lazy s)]t = [s']t-dt otherwise.In fix sf, sf is called with a signal s that represents
the signal returned by sf delayed by an infinitesimal amount time. If s', r = sf s then r is returned by fix and s is such that :
s]t = i for t = 0.s]t = [s']t-dt otherwise.Lifting combinators. For a given n the semantics is : [ln f a1 ... an]t = f [a1]t ... [an]t
module Bool : sig ... endBoolean signals
module Option : sig ... endOption signals
module Pair : sig ... endPair signals.