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 : ('a -> 'b) -> ('c, 'a) PMap.t -> ('c, 'b) PMap.t
  val mapi : ('a -> 'b -> 'c) -> ('a, 'b) PMap.t -> ('a, 'c) PMap.t
  val fold : ('a -> 'b -> 'b) -> ('c, 'a) PMap.t -> 'b -> 'b
  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