1(* ========================================================================= *)
2(* A MULTISET DATATYPE FOR ML                                                *)
3(* Copyright (c) 2002-2004 Joe Hurd.                                         *)
4(* ========================================================================= *)
5
6signature mlibMultiset =
7sig
8
9type 'a mset
10
11val empty    : ('a * 'a -> order) -> 'a mset
12val insert   : 'a * int -> 'a mset -> 'a mset
13val count    : 'a mset -> 'a -> int
14val union    : 'a mset -> 'a mset -> 'a mset
15val compl    : 'a mset -> 'a mset
16val subtract : 'a mset -> 'a mset -> 'a mset
17val subset   : 'a mset -> 'a mset -> bool
18val equal    : 'a mset -> 'a mset -> bool
19val compare  : 'a mset * 'a mset -> order option
20val sign     : 'a mset -> order option                (* compare to empty *)
21val app      : ('a * int -> unit) -> 'a mset -> unit
22val foldl    : ('a * int * 'b -> 'b) -> 'b -> 'a mset -> 'b
23val foldr    : ('a * int * 'b -> 'b) -> 'b -> 'a mset -> 'b
24val exists   : ('a * int -> bool) -> 'a mset -> bool
25val all      : ('a * int -> bool) -> 'a mset -> bool
26val map      : ('a * int -> int) -> 'a mset -> 'a mset
27val nonzero  : 'a mset -> int
28val to_list  : 'a mset -> ('a * int) list
29val pp_mset  : 'a mlibUseful.pp -> 'a mset mlibUseful.pp
30
31end
32