include module type of React.E
Primitive and basics
type 'a t = 'a React.eventThe type for events with occurrences of type 'a.
val never : 'a React.eventA never occuring event. For all t, [never]t = None.
val create : unit -> 'a React.event * (?step:React.step -> 'a -> unit)create () is a primitive event e and a send function. The function send is such that:
send vgenerates an occurrencevofeat the time it is called and triggers an update step.send ~step vgenerates an occurencevofeon the stepstepwhenstepis executed.send ~step vraisesInvalid_argumentif it was previously called with a step and this step has not executed yet or if the givenstepwas already executed.
Warning. send must not be executed inside an update step.
val retain : 'a React.event -> (unit -> unit) -> [ `R of unit -> unit ]retain e c keeps a reference to the closure c in e and returns the previously retained value. c will never be invoked.
Raises. Invalid_argument on E.never.
val stop : ?strong:bool -> 'a React.event -> unitstop e stops e from occuring. It conceptually becomes never and cannot be restarted. Allows to disable effectful events.
The strong argument should only be used on platforms where weak arrays have a strong semantics (i.e. JavaScript). See details.
Note. If executed in an update step the event may still occur in the step.
val equal : 'a React.event -> 'a React.event -> boolequal e e' is true iff e and e' are equal. If both events are different from never, physical equality is used.
val trace : ?iff:bool React.signal -> ('a -> unit) -> 'a React.event -> 'a React.eventtrace iff tr e is e except tr is invoked with e's occurence when iff is true (defaults to S.const true). For all t where [e]t = Some v and [iff]t = true, tr is invoked with v.
Transforming and filtering
val once : 'a React.event -> 'a React.eventonce e is e with only its next occurence.
- [
once e]t= Some vif [e]t= Some vand [e]<t= None. - [
once e]t= Noneotherwise.
val drop_once : 'a React.event -> 'a React.eventdrop_once e is e without its next occurrence.
- [
drop_once e]t= Some vif [e]t= Some vand [e]<t= Some _. - [
drop_once e]t= Noneotherwise.
val app : ('a -> 'b) React.event -> 'a React.event -> 'b React.eventapp ef e occurs when both ef and e occur simultaneously. The value is ef's occurence applied to e's one.
- [
app ef e]t= Some v'if [ef]t= Some fand [e]t= Some vandf v = v'. - [
app ef e]t= Noneotherwise.
val map : ('a -> 'b) -> 'a React.event -> 'b React.eventmap f e applies f to e's occurrences.
- [
map f e]t= Some (f v)if [e]t= Some v. - [
map f e]t= Noneotherwise.
val stamp : 'b React.event -> 'a -> 'a React.eventstamp e v is map (fun _ -> v) e.
val filter : ('a -> bool) -> 'a React.event -> 'a React.eventfilter p e are e's occurrences that satisfy p.
- [
filter p e]t= Some vif [e]t= Some vandp v = true - [
filter p e]t= Noneotherwise.
val fmap : ('a -> 'b option) -> 'a React.event -> 'b React.eventfmap fm e are e's occurrences filtered and mapped by fm.
- [
fmap fm e]t= Some viffm[e]t= Some v - [
fmap fm e]t= Noneotherwise.
val diff : ('a -> 'a -> 'b) -> 'a React.event -> 'b React.eventdiff f e occurs whenever e occurs except on the next occurence. Occurences are f v v' where v is e's current occurrence and v' the previous one.
- [
diff f e]t= Some rif [e]t= Some v, [e]<t= Some v'andf v v' = r. - [
diff f e]t= Noneotherwise.
val changes : ?eq:('a -> 'a -> bool) -> 'a React.event -> 'a React.eventchanges eq e is e's occurrences with occurences equal to the previous one dropped. Equality is tested with eq (defaults to structural equality).
- [
changes eq e]t= Some vif [e]t= Some vand either [e]<t= Noneor [e]<t= Some v'andeq v v' = false. - [
changes eq e]t= Noneotherwise.
val on : bool React.signal -> 'a React.event -> 'a React.eventon c e is the occurrences of e when c is true.
- [
on c e]t= Some vif [c]t= trueand [e]t= Some v. - [
on c e]t= Noneotherwise.
val when_ : bool React.signal -> 'a React.event -> 'a React.event- deprecated
Use
on.
val dismiss : 'b React.event -> 'a React.event -> 'a React.eventdismiss c e is the occurences of e except the ones when c occurs.
- [
dimiss c e]t= Some vif [c]t= Noneand [e]t= Some v. - [
dimiss c e]t= Noneotherwise.
val until : 'a React.event -> 'b React.event -> 'b React.eventuntil c e is e's occurences until c occurs.
- [
until c e]t= Some vif [e]t= Some vand [c]<=t= None - [
until c e]t= Noneotherwise.
Accumulating
val accum : ('a -> 'a) React.event -> 'a -> 'a React.eventaccum ef i accumulates a value, starting with i, using e's functional occurrences.
- [
accum ef i]t= Some (f i)if [ef]t= Some fand [ef]<t= None. - [
accum ef i]t= Some (f acc)if [ef]t= Some fand [accum ef i]<t= Some acc. - [
accum ef i]= Noneotherwise.
val fold : ('a -> 'b -> 'a) -> 'a -> 'b React.event -> 'a React.eventfold f i e accumulates e's occurrences with f starting with i.
- [
fold f i e]t= Some (f i v)if [e]t= Some vand [e]<t= None. - [
fold f i e]t= Some (f acc v)if [e]t= Some vand [fold f i e]<t= Some acc. - [
fold f i e]t= Noneotherwise.
Combining
val select : 'a React.event list -> 'a React.eventselect el is the occurrences of every event in el. If more than one event occurs simultaneously the leftmost is taken and the others are lost.
- [
select el]t=[List.find (fun e ->[e]t<> None) el]t. - [
select el]t= Noneotherwise.
val merge : ('a -> 'b -> 'a) -> 'a -> 'b React.event list -> 'a React.eventmerge f a el merges the simultaneous occurrences of every event in el using f and the accumulator a.
[merge f a el]t = List.fold_left f a (List.filter (fun o -> o <> None)
(List.map []t el)).
val switch : 'a React.event -> 'a React.event React.event -> 'a React.eventswitch e ee is e's occurrences until there is an occurrence e' on ee, the occurrences of e' are then used until there is a new occurrence on ee, etc..
- [
switch e ee]t=[e]t if [ee]<=t= None. - [
switch e ee]t=[e']t if [ee]<=t= Some e'.
val fix : ('a React.event -> 'a React.event * 'b) -> 'bfix ef allows to refer to the value an event had an infinitesimal amount of time before.
In fix ef, ef is called with an event e that represents the event returned by ef delayed by an infinitesimal amount of time. If e', r = ef e then r is returned by fix and e is such that :
- [
e]t=Noneif t = 0 - [
e]t=[e']t-dt otherwise
Raises. Invalid_argument if e' is directly a delayed event (i.e. an event given to a fixing function).
Lifting
val l1 : ('a -> 'b) -> 'a React.event -> 'b React.eventval l2 : ('a -> 'b -> 'c) -> 'a React.event -> 'b React.event -> 'c React.eventval l3 : ('a -> 'b -> 'c -> 'd) -> 'a React.event -> 'b React.event -> 'c React.event -> 'd React.eventval l4 : ('a -> 'b -> 'c -> 'd -> 'e) -> 'a React.event -> 'b React.event -> 'c React.event -> 'd React.event -> 'e React.eventval l5 : ('a -> 'b -> 'c -> 'd -> 'e -> 'f) -> 'a React.event -> 'b React.event -> 'c React.event -> 'd React.event -> 'e React.event -> 'f React.eventval l6 : ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g) -> 'a React.event -> 'b React.event -> 'c React.event -> 'd React.event -> 'e React.event -> 'f React.event -> 'g React.eventPervasives support
module Option : sig ... endEvents with option occurences.
Lwt-specific utilities
with_finaliser f e returns an event e' which behave as e, except that f is called when e' is garbage collected.
next e returns the next occurrence of e.
Avoid trying to create an "asynchronous loop" by calling next e again in a callback attached to the promise returned by next e:
- The callback is called within the React update step, so calling
next ewithin it will return a promise that is fulfilled with the same value as the current occurrence. - If you instead arrange for the React update step to end (for example, by calling
Lwt.pause ()within the callback), multiple React update steps may occur before the callback callsnext eagain, so some occurrences can be effectively "lost."
To robustly asynchronously process occurrences of e in a loop, use to_stream e, and repeatedly call Lwt_stream.next on the resulting stream.
limit f e limits the rate of e with f.
For example, to limit the rate of an event to 1 per second you can use: limit (fun () -> Lwt_unix.sleep 1.0) event.
from f creates an event which occurs each time f () returns a value. If f raises an exception, the event is just stopped.
val to_stream : 'a event -> 'a Lwt_stream.tCreates a stream holding all values occurring on the given event
val of_stream : 'a Lwt_stream.t -> 'a eventof_stream stream creates an event which occurs each time a value is available on the stream.
delay promise is an event which does not occur until promise resolves. Then it behaves as the event returned by promise.
val keep : 'a event -> unitkeep e keeps a reference to e so it will never be garbage collected.