sig
  exception Empty
  type 'a t
  type 'a heap_el
  val heap_el_is_valid : 'Heap.heap_el -> bool
  val heap_el_get_el : 'Heap.heap_el -> 'a
  val length : 'Heap.t -> int
  val is_empty : 'Heap.t -> bool
  val get_cmp : 'Heap.t -> '-> '-> int
  val create : ?min_size:int -> ('-> '-> int) -> 'Heap.t
  val of_array : ?min_size:int -> ('-> '-> int) -> 'a array -> 'Heap.t
  val copy : 'Heap.t -> 'Heap.t
  val mem : 'Heap.t -> '-> bool
  val heap_el_mem : 'Heap.t -> 'Heap.heap_el -> bool
  val find_heap_el : 'Heap.t -> '-> 'Heap.heap_el
  val top : 'Heap.t -> 'a
  val maybe_top : 'Heap.t -> 'a option
  val iter : 'Heap.t -> f:('-> unit) -> unit
  val pop : 'Heap.t -> 'a
  val maybe_pop : 'Heap.t -> 'a option
  val pop_heap_el : 'Heap.t -> 'Heap.heap_el
  val maybe_pop_heap_el : 'Heap.t -> 'Heap.heap_el option
  val cond_pop : 'Heap.t -> ('-> bool) -> 'a option
  val cond_pop_heap_el : 'Heap.t -> ('-> bool) -> 'Heap.heap_el option
  val push : 'Heap.t -> '-> 'Heap.heap_el
  val push_heap_el : 'Heap.t -> 'Heap.heap_el -> unit
  val remove : 'Heap.heap_el -> unit
  val update : 'Heap.heap_el -> '-> unit
  val check_heap_property : 'Heap.t -> bool
end