sig
  type t
  type rope = Zed_rope.t
  exception Out_of_bounds
  val empty : Zed_rope.t
  val make : int -> CamomileLibrary.UChar.t -> Zed_rope.t
  val init : int -> (int -> CamomileLibrary.UChar.t) -> Zed_rope.t
  val rev_init : int -> (int -> CamomileLibrary.UChar.t) -> Zed_rope.t
  val singleton : CamomileLibrary.UChar.t -> Zed_rope.t
  val length : Zed_rope.t -> int
  val is_empty : Zed_rope.t -> bool
  val compare : Zed_rope.t -> Zed_rope.t -> int
  val equal : Zed_rope.t -> Zed_rope.t -> bool
  val of_string : string -> Zed_rope.t
  val to_string : Zed_rope.t -> string
  val get : Zed_rope.t -> int -> CamomileLibrary.UChar.t
  val append : Zed_rope.t -> Zed_rope.t -> Zed_rope.t
  val concat : Zed_rope.t -> Zed_rope.t list -> Zed_rope.t
  val sub : Zed_rope.t -> int -> int -> Zed_rope.t
  val break : Zed_rope.t -> int -> Zed_rope.t * Zed_rope.t
  val before : Zed_rope.t -> int -> Zed_rope.t
  val after : Zed_rope.t -> int -> Zed_rope.t
  val insert : Zed_rope.t -> int -> Zed_rope.t -> Zed_rope.t
  val remove : Zed_rope.t -> int -> int -> Zed_rope.t
  val replace : Zed_rope.t -> int -> int -> Zed_rope.t -> Zed_rope.t
  val lchop : Zed_rope.t -> Zed_rope.t
  val rchop : Zed_rope.t -> Zed_rope.t
  val iter : (CamomileLibrary.UChar.t -> unit) -> Zed_rope.t -> unit
  val rev_iter : (CamomileLibrary.UChar.t -> unit) -> Zed_rope.t -> unit
  val fold : (CamomileLibrary.UChar.t -> '-> 'a) -> Zed_rope.t -> '-> 'a
  val rev_fold :
    (CamomileLibrary.UChar.t -> '-> 'a) -> Zed_rope.t -> '-> 'a
  val map :
    (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t) ->
    Zed_rope.t -> Zed_rope.t
  val rev_map :
    (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t) ->
    Zed_rope.t -> Zed_rope.t
  val iter_leaf : (Zed_utf8.t -> unit) -> Zed_rope.t -> unit
  val rev_iter_leaf : (Zed_utf8.t -> unit) -> Zed_rope.t -> unit
  val fold_leaf : (Zed_utf8.t -> '-> 'a) -> Zed_rope.t -> '-> 'a
  val rev_fold_leaf : (Zed_utf8.t -> '-> 'a) -> Zed_rope.t -> '-> 'a
  module Zip :
    sig
      type t
      val make_f : Zed_rope.rope -> int -> Zed_rope.Zip.t
      val make_b : Zed_rope.rope -> int -> Zed_rope.Zip.t
      val offset : Zed_rope.Zip.t -> int
      val next : Zed_rope.Zip.t -> CamomileLibrary.UChar.t * Zed_rope.Zip.t
      val prev : Zed_rope.Zip.t -> CamomileLibrary.UChar.t * Zed_rope.Zip.t
      val move : int -> Zed_rope.Zip.t -> Zed_rope.Zip.t
      val at_bos : Zed_rope.Zip.t -> bool
      val at_eos : Zed_rope.Zip.t -> bool
      val find_f :
        (CamomileLibrary.UChar.t -> bool) -> Zed_rope.Zip.t -> Zed_rope.Zip.t
      val find_b :
        (CamomileLibrary.UChar.t -> bool) -> Zed_rope.Zip.t -> Zed_rope.Zip.t
      val sub : Zed_rope.Zip.t -> int -> Zed_rope.rope
      val slice : Zed_rope.Zip.t -> Zed_rope.Zip.t -> Zed_rope.rope
    end
  module Buffer :
    sig
      type t
      val create : unit -> Zed_rope.Buffer.t
      val add : Zed_rope.Buffer.t -> CamomileLibrary.UChar.t -> unit
      val contents : Zed_rope.Buffer.t -> Zed_rope.rope
      val reset : Zed_rope.Buffer.t -> unit
    end
  module Text :
    sig
      type t = rope
      val get : t -> int -> CamomileLibrary.UChar.t
      val init : int -> (int -> CamomileLibrary.UChar.t) -> t
      val length : t -> int
      type index = Zip.t
      val look : t -> index -> CamomileLibrary.UChar.t
      val nth : t -> int -> index
      val next : t -> index -> index
      val prev : t -> index -> index
      val out_of_range : t -> index -> bool
      val iter : (CamomileLibrary.UChar.t -> unit) -> t -> unit
      val compare : t -> t -> int
      val first : t -> index
      val last : t -> index
      val move : t -> index -> int -> index
      val compare_index : t -> index -> index -> int
      module Buf :
        sig
          type buf
          val create : int -> buf
          val contents : buf -> t
          val clear : buf -> unit
          val reset : buf -> unit
          val add_char : buf -> CamomileLibrary.UChar.t -> unit
          val add_string : buf -> t -> unit
          val add_buffer : buf -> buf -> unit
        end
    end
end