sig
  module type OrderedType =
    sig
      type t
      val compare : Pqueue.OrderedType.t -> Pqueue.OrderedType.t -> int
    end
  module type S =
    sig
      type elt
      type t
      val empty : Pqueue.S.t
      val is_empty : Pqueue.S.t -> bool
      val add : Pqueue.S.elt -> Pqueue.S.t -> Pqueue.S.t
      val union : Pqueue.S.t -> Pqueue.S.t -> Pqueue.S.t
      val find_min : Pqueue.S.t -> Pqueue.S.elt
      val remove_min : Pqueue.S.t -> Pqueue.S.t
      val size : Pqueue.S.t -> int
      val fold : ('-> Pqueue.S.elt -> 'a) -> '-> Pqueue.S.t -> 'a
    end
  module Make :
    functor (Ord : OrderedType->
      sig
        type elt = Ord.t
        type t
        val empty : t
        val is_empty : t -> bool
        val add : elt -> t -> t
        val union : t -> t -> t
        val find_min : t -> elt
        val remove_min : t -> t
        val size : t -> int
        val fold : ('-> elt -> 'a) -> '-> t -> 'a
      end
end