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