sig
  type 'a t
  type ('a, 'b) reagent = ('a, 'b) R.t
  val create : ?name:string -> unit -> 'a t
  val exchange : 'a t -> ('a, 'a) reagent
end