sig
  type atom = char
  type t = string
  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