sig
  exception Empty
  type 'el t = 'el Heap.t
  type 'el heap_el = 'el Heap.heap_el
  val heap_el_is_valid : 'el heap_el -> bool
  val heap_el_get_el : 'el heap_el -> 'el
  val heap_el_get_heap_exn : 'el heap_el -> 'el t
  val length : 'el t -> int
  val is_empty : 'el t -> bool
  val get_cmp : 'el t -> 'el -> 'el -> int
  val create : ?min_size:int -> ('el -> 'el -> int) -> 'el t
  val of_array : ?min_size:int -> ('el -> 'el -> int) -> 'el array -> 'el t
  val copy : 'el t -> 'el t
  val mem : 'el t -> 'el -> bool
  val heap_el_mem : 'el t -> 'el heap_el -> bool
  val find_heap_el_exn : 'el t -> 'el -> 'el heap_el
  val top : 'el t -> 'el option
  val top_exn : 'el t -> 'el
  val top_heap_el : 'el t -> 'el heap_el option
  val top_heap_el_exn : 'el t -> 'el heap_el
  val iter_el : 'a t -> f:('a heap_el -> unit) -> unit
  val iter : 'a t -> f:('-> unit) -> unit
  val pop : 'el t -> 'el option
  val pop_exn : 'el t -> 'el
  val pop_heap_el : 'el t -> 'el heap_el option
  val pop_heap_el_exn : 'el t -> 'el heap_el
  val cond_pop : 'el t -> ('el -> bool) -> 'el option
  val cond_pop_heap_el : 'el t -> ('el -> bool) -> 'el heap_el option
  val push : 'el t -> 'el -> 'el heap_el
  val push_heap_el : 'el t -> 'el heap_el -> unit
  val remove : 'el heap_el -> unit
  val update : 'el heap_el -> 'el -> unit
  val check_heap_property : 'el t -> bool
  val sexp_of_t : ('el -> Sexplib.Sexp.t) -> 'el t -> Sexplib.Sexp.t
  val sexp_of_heap_el :
    ('el -> Sexplib.Sexp.t) -> 'el heap_el -> Sexplib.Sexp.t
end