sig
module type Scheduler =
sig
type 'a cont
val suspend : ('a Reagents.Scheduler.cont -> 'a option) -> 'a
val resume : 'a Reagents.Scheduler.cont -> 'a -> unit
val get_tid : unit -> int
end
module type S =
sig
type ('a, 'b) t
val never : ('a, 'b) Reagents.S.t
val constant : 'a -> ('b, 'a) Reagents.S.t
val post_commit : ('a -> unit) -> ('a, 'a) Reagents.S.t
val lift : ('a -> 'b) -> ('a, 'b) Reagents.S.t
val lift_blocking : ('a -> 'b option) -> ('a, 'b) Reagents.S.t
val return : ('a -> (unit, 'b) Reagents.S.t) -> ('a, 'b) Reagents.S.t
val ( >>= ) :
('a, 'b) Reagents.S.t ->
('b -> (unit, 'c) Reagents.S.t) -> ('a, 'c) Reagents.S.t
val ( >>> ) :
('a, 'b) Reagents.S.t ->
('b, 'c) Reagents.S.t -> ('a, 'c) Reagents.S.t
val ( <+> ) :
('a, 'b) Reagents.S.t ->
('a, 'b) Reagents.S.t -> ('a, 'b) Reagents.S.t
val ( <*> ) :
('a, 'b) Reagents.S.t ->
('a, 'c) Reagents.S.t -> ('a, 'b * 'c) Reagents.S.t
val attempt : ('a, 'b) Reagents.S.t -> ('a, 'b option) Reagents.S.t
val run : ('a, 'b) Reagents.S.t -> 'a -> 'b
module Ref :
sig
type 'a ref
type ('a, 'b) reagent = ('a, 'b) t
val mk_ref : 'a -> 'a ref
val read : 'a ref -> (unit, 'a) reagent
val read_imm : 'a ref -> 'a
val cas : 'a ref -> 'a -> 'a -> (unit, unit) reagent
val cas_imm : 'a ref -> 'a -> 'a -> bool
val upd :
'a ref -> ('a -> 'b -> ('a * 'c) option) -> ('b, 'c) reagent
end
module Channel :
sig
type ('a, 'b) endpoint
type ('a, 'b) reagent = ('a, 'b) t
val mk_chan :
?name:string -> unit -> ('a, 'b) endpoint * ('b, 'a) endpoint
val swap : ('a, 'b) endpoint -> ('a, 'b) reagent
end
end
module Make : functor (Sched : Scheduler) -> S
end