sig
  type 'a t
  val empty : 'PSQueue.t
  val add : 'PSQueue.t -> int -> '-> int -> 'PSQueue.t
  val is_empty : 'PSQueue.t -> bool
  val top : 'PSQueue.t -> int * 'a * int
  val get : 'PSQueue.t -> int -> 'a * int
  val pop : 'PSQueue.t -> 'PSQueue.t
  val remove : 'PSQueue.t -> int -> 'PSQueue.t
  val fold : ('-> int -> '-> int -> 'a) -> 'PSQueue.t -> '-> 'a
end