functor (A : ArrayType->
  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.QueueOfArray.V.t;
      mutable front : int;
      mutable back : int;
    }
    type elt = Vector.QueueOfArray.V.elt
    val create : ?size:int -> unit -> Vector.QueueOfArray.t
    val is_empty : Vector.QueueOfArray.t -> bool
    val clear : Vector.QueueOfArray.t -> unit
    val add : Vector.QueueOfArray.t -> Vector.QueueOfArray.V.elt -> unit
    val peek : Vector.QueueOfArray.t -> Vector.QueueOfArray.V.elt
    val compact : Vector.QueueOfArray.t -> unit
    val pop : Vector.QueueOfArray.t -> Vector.QueueOfArray.V.elt
    val size : Vector.QueueOfArray.t -> int
  end