sig
  type ('instance, 'bin, 'increment, 'accu) t
  val create :
    ?n:int ->
    '-> ('-> 'b) -> ('-> '-> 'd) -> ('a, 'b, 'c, 'd) Biocaml_accu.t
  val add : ('a, 'b, 'c, 'd) Biocaml_accu.t -> '-> '-> unit
  val stream : ('a, 'b, 'c, 'd) Biocaml_accu.t -> ('b * 'd) Stream.t
  val get : ('a, 'b, 'c, 'd) Biocaml_accu.t -> '-> 'd option
  type 'instance counter = ('instance, 'instance, int, int) Biocaml_accu.t
  module Counter :
    sig
      type 'a t = 'Biocaml_accu.counter
      val create : ?n:int -> unit -> 'Biocaml_accu.Counter.t
      val add : 'Biocaml_accu.counter -> '-> int -> unit
      val tick : 'Biocaml_accu.counter -> '-> unit
      val stream : 'Biocaml_accu.counter -> ('a * int) Stream.t
      val of_stream : 'Stream.t -> 'Biocaml_accu.counter
    end
  val counts : ('-> 'b) -> 'Stream.t -> ('b * int) Stream.t
  val product :
    ?filter:('-> '-> bool) ->
    ('-> '-> 'c) -> 'a list -> 'b list -> ('c * int) Stream.t
  type ('a, 'b) relation = ('a, 'a, 'b, 'b list) Biocaml_accu.t
  module Relation :
    sig
      type ('a, 'b) t = ('a, 'b) Biocaml_accu.relation
      val create : ?n:int -> unit -> ('a, 'b) Biocaml_accu.Relation.t
      val add : ('a, 'b) Biocaml_accu.Relation.t -> '-> '-> unit
      val stream : ('a, 'b) Biocaml_accu.relation -> ('a * 'b list) Stream.t
      val of_stream : ('a * 'b) Stream.t -> ('a, 'b) Biocaml_accu.relation
    end
  val relation : ('a * 'b) Stream.t -> ('a * 'b list) Stream.t
end