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