sig
  exception Timeout
  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 create : unit -> Lwt_pqueue.S.t
      val add : Lwt_pqueue.S.elt -> Lwt_pqueue.S.t -> unit
      val take : ?timeout:float -> Lwt_pqueue.S.t -> Lwt_pqueue.S.elt Lwt.t
      val size : Lwt_pqueue.S.t -> int
      val fold : ('-> Lwt_pqueue.S.elt -> 'a) -> '-> Lwt_pqueue.S.t -> 'a
    end
  module Make :
    functor (Ord : OrderedType->
      sig
        type elt = Ord.t
        type t
        val create : unit -> t
        val add : elt -> t -> unit
        val take : ?timeout:float -> t -> elt Lwt.t
        val size : t -> int
        val fold : ('-> elt -> 'a) -> '-> t -> 'a
      end
end