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