PMap

`sig
type ('a, 'b) t
val empty : ('a, 'b) PMap.t
val is_empty : ('a, 'b) PMap.t -> bool
val create : ('a -> 'a -> int) -> ('a, 'b) PMap.t
val add : 'a -> 'b -> ('a, 'b) PMap.t -> ('a, 'b) PMap.t
val find : 'a -> ('a, 'b) PMap.t -> 'b
val remove : 'a -> ('a, 'b) PMap.t -> ('a, 'b) PMap.t
val mem : 'a -> ('a, 'b) PMap.t -> bool
val exists : 'a -> ('a, 'b) PMap.t -> bool
val iter : ('a -> 'b -> unit) -> ('a, 'b) PMap.t -> unit
val map : ('b -> 'c) -> ('a, 'b) PMap.t -> ('a, 'c) PMap.t
val mapi : ('a -> 'b -> 'c) -> ('a, 'b) PMap.t -> ('a, 'c) PMap.t
val fold : ('b -> 'c -> 'c) -> ('a, 'b) PMap.t -> 'c -> 'c
val foldi : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) PMap.t -> 'c -> 'c
val enum : ('a, 'b) PMap.t -> ('a * 'b) Enum.t
val of_enum : ?cmp:('a -> 'a -> int) -> ('a * 'b) Enum.t -> ('a, 'b) PMap.t
end`