sig
  type ('a, 'b, 'c, 'd) t
  val create :
    ?n:int ->
    'a -> ('b -> 'c) -> ('d -> 'a -> 'a) -> ('b, 'c, 'd, 'a) Biocaml_accu.t
  val add : ('a, 'b, 'c, 'd) Biocaml_accu.t -> 'a -> 'c -> unit
  val enum : ('a, 'b, 'c, 'd) Biocaml_accu.t -> ('b * 'd) Batteries.Enum.t
  val get : ('a, 'b, 'c, 'd) Biocaml_accu.t -> 'b -> 'd
  type 'a counter = ('a, 'a, int, int) Biocaml_accu.t
  module Counter :
    sig
      type 'a t = 'a Biocaml_accu.counter
      val create : ?n:int -> unit -> 'a Biocaml_accu.Counter.t
      val add : 'a Biocaml_accu.counter -> 'a -> int -> unit
      val tick : 'a Biocaml_accu.counter -> 'a -> unit
    end
  val counts :
    ('a -> 'b) -> 'a Batteries.Enum.t -> ('b * int) Batteries.Enum.t
end