functor (E : AnyType->
  sig
    module V :
      sig
        type t = OfArray(MakeArray(E)).t
        type elt = MakeArray(E).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 =
      StackOfArray(MakeArray(E)).t = {
      mutable v : V.t;
      mutable back : int;
    }
    type elt = V.elt
    val create : ?size:int -> unit -> t
    val is_empty : t -> bool
    val clear : t -> unit
    val add : t -> V.elt -> unit
    val push : t -> V.elt -> unit
    val peek : t -> V.elt
    val pop : t -> V.elt
    val size : t -> int
  end