sig
  type 'a t = {
    mutable dummy : 'a;
    mutable data : 'a array;
    mutable sz : int;
  }
  val make : int -> 'a -> 'a Vec.t
  val init : int -> (int -> 'a) -> 'a -> 'a Vec.t
  val from_array : 'a array -> int -> 'a -> 'a Vec.t
  val from_list : 'a list -> int -> 'a -> 'a Vec.t
  val clear : 'a Vec.t -> unit
  val shrink : 'a Vec.t -> int -> unit
  val pop : 'a Vec.t -> unit
  val size : 'a Vec.t -> int
  val is_empty : 'a Vec.t -> bool
  val grow_to : 'a Vec.t -> int -> unit
  val grow_to_double_size : 'a Vec.t -> unit
  val grow_to_by_double : 'a Vec.t -> int -> unit
  val is_full : 'a Vec.t -> bool
  val push : 'a Vec.t -> 'a -> unit
  val push_none : 'a Vec.t -> unit
  val last : 'a Vec.t -> 'a
  val get : 'a Vec.t -> int -> 'a
  val set : 'a Vec.t -> int -> 'a -> unit
  val set_size : 'a Vec.t -> int -> unit
  val copy : 'a Vec.t -> 'a Vec.t
  val move_to : 'a Vec.t -> 'a Vec.t -> unit
  val remove : 'a Vec.t -> 'a -> unit
  val fast_remove : 'a Vec.t -> 'a -> unit
  val sort : 'a Vec.t -> ('a -> 'a -> int) -> unit
end