sig
  type 'a t
  type ('a, 'b) reagent = ('a, 'b) R.t
  val create : unit -> 'a t
  val push : 'a t -> ('a, unit) reagent
  val pop : 'a t -> (unit, 'a) reagent
  val try_pop : 'a t -> (unit, 'a option) reagent
end