functor (V : Vector->
  sig
    type atom = V.atom
    type t = V.t
    val length : t -> int
    val set : t -> int -> atom -> t
    val get : t -> int -> atom
    val insert : t -> int -> atom -> t
    val delete : t -> int -> t
    type patch
    val diff : t -> t -> patch
    val apply : t -> patch -> t
    val merge : resolve:(atom -> atom -> atom) -> ancestor:t -> t -> t -> t
  end