sig
  type ('a, 'b) t
  val never : ('a, 'b) Reagents.S.t
  val constant : '-> ('b, 'a) Reagents.S.t
  val post_commit : ('-> unit) -> ('a, 'a) Reagents.S.t
  val lift : ('-> 'b) -> ('a, 'b) Reagents.S.t
  val lift_blocking : ('-> 'b option) -> ('a, 'b) Reagents.S.t
  val return : ('-> (unit, 'b) Reagents.S.t) -> ('a, 'b) Reagents.S.t
  val ( >>= ) :
    ('a, 'b) Reagents.S.t ->
    ('-> (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 -> '-> 'b
  module Ref :
    sig
      type 'a ref
      type ('a, 'b) reagent = ('a, 'b) t
      val mk_ref : '-> 'a ref
      val read : 'a ref -> (unit, 'a) reagent
      val read_imm : 'a ref -> 'a
      val cas : 'a ref -> '-> '-> (unit, unit) reagent
      val cas_imm : 'a ref -> '-> '-> bool
      val upd : 'a ref -> ('-> '-> ('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