sig
  type 'a heap =
    'a Heap.heap = {
    mutable data : 'a array;
    mutable size : int;
    lessthan : 'a -> 'a -> bool;
  }
  val create : ('a -> 'a -> bool) -> int -> 'a Ext.Heap.heap
  val realloc : 'a Ext.Heap.heap -> int -> unit
  val size : 'a Ext.Heap.heap -> int
  val is_empty : 'a Ext.Heap.heap -> bool
  val grow : 'a Ext.Heap.heap -> unit
  val swap : 'a Ext.Heap.heap -> int -> int -> unit
  val sift_down : 'a Ext.Heap.heap -> int -> unit
  val sift_up : 'a Ext.Heap.heap -> int -> unit
  val add : 'a Ext.Heap.heap -> 'a -> unit
  val remove_min : 'a Ext.Heap.heap -> unit
  val get : 'a Ext.Heap.heap -> int -> 'a
  val remove : 'a Ext.Heap.heap -> int -> unit
  val min : 'a Ext.Heap.heap -> 'a
  val rebuild : 'a Ext.Heap.heap -> unit
  val build : ('a -> 'a -> bool) -> 'a array -> 'a Ext.Heap.heap
  val remove_all : 'a Ext.Heap.heap -> ('a -> bool) -> unit
  val clear : 'a Ext.Heap.heap -> unit
  val iter : ('a -> 'b) -> 'a Ext.Heap.heap -> unit
  val to_array : 'a Ext.Heap.heap -> 'a array
  val to_list : 'a Ext.Heap.heap -> 'a list
end