sig
  module type S = Multiset_intf.S
  module Make :
    functor (X : Map.OrderedType->
      sig
        type elt = X.t
        type t
        val size : t -> int
        val cardinal : t -> Z.t
        val empty : t
        val is_empty : t -> bool
        val mem : t -> elt -> bool
        val find : t -> elt -> Z.t
        val singleton : elt -> t
        val doubleton : elt -> elt -> t
        val add : t -> elt -> t
        val add_coeff : t -> elt -> Z.t -> t
        val union : t -> t -> t
        val intersection : t -> t -> t
        val sum : t -> t -> t
        val difference : t -> t -> t
        val product : Z.t -> t -> t
        val filter : (elt -> Z.t -> bool) -> t -> t
        val map : (elt -> elt) -> t -> t
        val map_coeff : (elt -> Z.t -> Z.t) -> t -> t
        val filter_map : (elt -> Z.t -> (elt * Z.t) option) -> t -> t
        val flat_map : (elt -> t) -> t -> t
        module Seq :
          sig
            val of_seq : t -> elt Sequence.t -> t
            val to_seq : t -> elt Sequence.t
            val of_coeffs : t -> (elt * Z.t) Sequence.t -> t
            val to_coeffs : t -> (elt * Z.t) Sequence.t
          end
        val iter : (elt -> unit) -> t -> unit
        val fold : ('-> elt -> 'a) -> '-> t -> 'a
        val iter_coeffs : (elt -> Z.t -> unit) -> t -> unit
        val fold_coeffs : ('-> elt -> Z.t -> 'a) -> '-> t -> 'a
        val for_all : (elt -> bool) -> t -> bool
        val exists : (elt -> bool) -> t -> bool
        val choose : t -> elt
        val of_list : elt list -> t
        val of_coeffs : (elt * Z.t) list -> t
        val of_iarray : elt IArray.t -> t
        val of_array : elt array -> t
        val to_list : t -> (elt * Z.t) list
        val eq : t -> t -> bool
        val cancel : t -> t -> t * t
        val compare : t -> t -> int
        val compare_partial :
          (elt -> elt -> Comparison.t) -> t -> t -> Comparison.t
        val is_max : (elt -> elt -> Comparison.t) -> elt -> t -> bool
        val max : (elt -> elt -> Comparison.t) -> t -> t
        val max_seq :
          (elt -> elt -> Comparison.t) -> t -> (elt, Z.t) Sequence.t2
        val max_l : (elt -> elt -> Comparison.t) -> elt list -> elt list
        val compare_partial_l :
          (elt -> elt -> Comparison.t) ->
          elt list -> elt list -> Comparison.t
        val pp : elt CCFormat.printer -> t CCFormat.printer
      end
end