sig
  exception EmptyHeap
  module type OrderType =
    sig type t val compare : Heap.OrderType.t -> Heap.OrderType.t -> int end
  module type S =
    sig
      type t
      type elem
      val empty : Heap.S.t
      val pop : Heap.S.t -> Heap.S.elem * Heap.S.t
      val add : Heap.S.t -> Heap.S.elem list -> Heap.S.t
      val elements : Heap.S.t -> Heap.S.elem list
      val length : Heap.S.t -> int
    end
  module Make :
    functor (X : OrderType->
      sig
        type t
        type elem = X.t
        val empty : t
        val pop : t -> elem * t
        val add : t -> elem list -> t
        val elements : t -> elem list
        val length : t -> int
      end
end