sig
  module Make :
    functor (R : Reagents.S->
      sig
        module Counter :
          sig
            type t
            type ('a, 'b) reagent = ('a, 'b) R.t
            val create : int -> t
            val get : t -> (unit, int) reagent
            val inc : t -> (unit, int) reagent
            val dec : t -> (unit, int) reagent
            val try_dec : t -> (unit, int option) reagent
          end
        module Treiber_stack :
          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
        module Elimination_stack :
          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
        module MichaelScott_queue :
          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
      end
end