sig
  module type PQ =
    sig
      type 'a t
      val empty : 'Util.comparator -> 'PQueue.PQ.t
      val insert : '-> 'PQueue.PQ.t -> 'PQueue.PQ.t
      val remove : 'PQueue.PQ.t -> ('a * 'PQueue.PQ.t) option
      val max : 'PQueue.PQ.t -> 'a option
      val size : 'PQueue.PQ.t -> int
      val is_empty : 'PQueue.PQ.t -> bool
      val comparator : 'PQueue.PQ.t -> 'Util.comparator
    end
  module ListImpl : PQ
  module HeapImpl : PQ
  module Heapsort :
    functor (PQ : PQ->
      sig val sort : ('-> '-> int) -> 'a list -> 'a list end
end