sig
  module type ORD =
    sig type t val compare : t -> t -> int val string_of : t -> string end
  module type S =
    sig
      type 'a t
      type key
      exception Empty
      val create : unit -> 'PrioQueues.S.t
      val clear : 'PrioQueues.S.t -> unit
      val is_empty : 'PrioQueues.S.t -> bool
      val top : 'PrioQueues.S.t -> 'a
      val pop : 'PrioQueues.S.t -> 'a
      val push : PrioQueues.S.key -> '-> 'PrioQueues.S.t -> unit
      val string_of : ('-> string) -> 'PrioQueues.S.t -> string
    end
  module Make :
    functor (Ord : ORD->
      sig
        type 'a t
        type key = Ord.t
        exception Empty
        val create : unit -> 'a t
        val clear : 'a t -> unit
        val is_empty : 'a t -> bool
        val top : 'a t -> 'a
        val pop : 'a t -> 'a
        val push : key -> '-> 'a t -> unit
        val string_of : ('-> string) -> 'a t -> string
      end
end