sig
  type 'a sequence = ('-> unit) -> unit
  module type S =
    sig
      type elt
      type t
      val empty : CCMultiSet.S.t
      val is_empty : CCMultiSet.S.t -> bool
      val mem : CCMultiSet.S.t -> CCMultiSet.S.elt -> bool
      val count : CCMultiSet.S.t -> CCMultiSet.S.elt -> int
      val singleton : CCMultiSet.S.elt -> CCMultiSet.S.t
      val add : CCMultiSet.S.t -> CCMultiSet.S.elt -> CCMultiSet.S.t
      val remove : CCMultiSet.S.t -> CCMultiSet.S.elt -> CCMultiSet.S.t
      val add_mult :
        CCMultiSet.S.t -> CCMultiSet.S.elt -> int -> CCMultiSet.S.t
      val remove_mult :
        CCMultiSet.S.t -> CCMultiSet.S.elt -> int -> CCMultiSet.S.t
      val remove_all : CCMultiSet.S.t -> CCMultiSet.S.elt -> CCMultiSet.S.t
      val update :
        CCMultiSet.S.t -> CCMultiSet.S.elt -> (int -> int) -> CCMultiSet.S.t
      val min : CCMultiSet.S.t -> CCMultiSet.S.elt
      val max : CCMultiSet.S.t -> CCMultiSet.S.elt
      val union : CCMultiSet.S.t -> CCMultiSet.S.t -> CCMultiSet.S.t
      val meet : CCMultiSet.S.t -> CCMultiSet.S.t -> CCMultiSet.S.t
      val intersection : CCMultiSet.S.t -> CCMultiSet.S.t -> CCMultiSet.S.t
      val diff : CCMultiSet.S.t -> CCMultiSet.S.t -> CCMultiSet.S.t
      val contains : CCMultiSet.S.t -> CCMultiSet.S.t -> bool
      val compare : CCMultiSet.S.t -> CCMultiSet.S.t -> int
      val equal : CCMultiSet.S.t -> CCMultiSet.S.t -> bool
      val cardinal : CCMultiSet.S.t -> int
      val iter : CCMultiSet.S.t -> (int -> CCMultiSet.S.elt -> unit) -> unit
      val fold :
        CCMultiSet.S.t -> '-> ('-> int -> CCMultiSet.S.elt -> 'b) -> 'b
      val of_list : CCMultiSet.S.elt list -> CCMultiSet.S.t
      val to_list : CCMultiSet.S.t -> CCMultiSet.S.elt list
      val to_seq : CCMultiSet.S.t -> CCMultiSet.S.elt CCMultiSet.sequence
      val of_seq : CCMultiSet.S.elt CCMultiSet.sequence -> CCMultiSet.S.t
      val of_list_mult : (CCMultiSet.S.elt * int) list -> CCMultiSet.S.t
      val to_list_mult : CCMultiSet.S.t -> (CCMultiSet.S.elt * int) list
      val to_seq_mult :
        CCMultiSet.S.t -> (CCMultiSet.S.elt * int) CCMultiSet.sequence
      val of_seq_mult :
        (CCMultiSet.S.elt * int) CCMultiSet.sequence -> CCMultiSet.S.t
    end
  module Make :
    functor (O : Set.OrderedType->
      sig
        type elt = O.t
        type t
        val empty : t
        val is_empty : t -> bool
        val mem : t -> elt -> bool
        val count : t -> elt -> int
        val singleton : elt -> t
        val add : t -> elt -> t
        val remove : t -> elt -> t
        val add_mult : t -> elt -> int -> t
        val remove_mult : t -> elt -> int -> t
        val remove_all : t -> elt -> t
        val update : t -> elt -> (int -> int) -> t
        val min : t -> elt
        val max : t -> elt
        val union : t -> t -> t
        val meet : t -> t -> t
        val intersection : t -> t -> t
        val diff : t -> t -> t
        val contains : t -> t -> bool
        val compare : t -> t -> int
        val equal : t -> t -> bool
        val cardinal : t -> int
        val iter : t -> (int -> elt -> unit) -> unit
        val fold : t -> '-> ('-> int -> elt -> 'b) -> 'b
        val of_list : elt list -> t
        val to_list : t -> elt list
        val to_seq : t -> elt sequence
        val of_seq : elt sequence -> t
        val of_list_mult : (elt * int) list -> t
        val to_list_mult : t -> (elt * int) list
        val to_seq_mult : t -> (elt * int) sequence
        val of_seq_mult : (elt * int) sequence -> t
      end
end