functor
  (A : ArrayType) (E : sig type t = A.elt val compare : t -> t -> int end->
  sig
    module V :
      sig
        type t = OfArray(A).t
        type elt = A.elt
        val make : ?size:int -> unit -> t
        val set : t -> int -> elt -> unit
        val get : t -> int -> elt
        val clear : t -> unit
        val index_max : t -> int
        val length : t -> int
        val capacity : t -> int
        val blit : t -> int -> t -> int -> int -> unit
        val default : unit -> elt
      end
    type t = { mutable v : Vector.HeapOfArray.V.t; mutable back : int; }
    type elt = Vector.HeapOfArray.V.elt
    val create : ?size:int -> unit -> Vector.HeapOfArray.t
    val is_empty : Vector.HeapOfArray.t -> bool
    val clear : Vector.HeapOfArray.t -> unit
    val add : Vector.HeapOfArray.t -> Vector.HeapOfArray.V.elt -> unit
    val push : Vector.HeapOfArray.t -> Vector.HeapOfArray.V.elt -> unit
    val peek_min : Vector.HeapOfArray.t -> Vector.HeapOfArray.V.elt
    val pop_min : Vector.HeapOfArray.t -> Vector.HeapOfArray.V.elt
    val size : Vector.HeapOfArray.t -> int
  end