sig
  module type OrderedType =
    sig
      type t
      val compare :
        Lwt_pqueue.OrderedType.t -> Lwt_pqueue.OrderedType.t -> int
    end
  module type S =
    sig
      type elt
      type t
      val empty : Lwt_pqueue.S.t
      val is_empty : Lwt_pqueue.S.t -> bool
      val add : Lwt_pqueue.S.elt -> Lwt_pqueue.S.t -> Lwt_pqueue.S.t
      val union : Lwt_pqueue.S.t -> Lwt_pqueue.S.t -> Lwt_pqueue.S.t
      val find_min : Lwt_pqueue.S.t -> Lwt_pqueue.S.elt
      val lookup_min : Lwt_pqueue.S.t -> Lwt_pqueue.S.elt option
      val remove_min : Lwt_pqueue.S.t -> Lwt_pqueue.S.t
      val size : Lwt_pqueue.S.t -> int
    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 lookup_min : t -> elt option
        val remove_min : t -> t
        val size : t -> int
      end
end