sig
  type t = BatText.t
  exception Out_of_bounds
  exception Invalid_rope
  val max_length : int
  val empty : t
  val of_latin1 : string -> t
  val of_string : string -> t
  val to_string : t -> string
  val of_uchar : BatUChar.t -> t
  val of_char : char -> t
  val make : int -> BatUChar.t -> t
  val join : t -> t list -> t
  val explode : t -> BatUChar.t list
  val implode : BatUChar.t list -> t
  val is_empty : t -> bool
  val length : t -> int
  val height : t -> int
  val balance : t -> t
  val append : t -> t -> t
  val ( ^^^ ) : t -> t -> t
  val append_char : BatUChar.t -> t -> t
  val prepend_char : BatUChar.t -> t -> t
  val get : t -> int -> BatUChar.t
  val set : t -> int -> BatUChar.t -> t
  val sub : t -> int -> int -> t
  val insert : int -> t -> t -> t
  val remove : int -> int -> t -> t
  val iter : (BatUChar.t -> unit) -> t -> unit
  val iteri : ?base:int -> (int -> BatUChar.t -> unit) -> t -> unit
  val range_iter : (BatUChar.t -> unit) -> int -> int -> t -> unit
  val range_iteri :
    (int -> BatUChar.t -> unit) -> ?base:int -> int -> int -> t -> unit
  val fold : ('-> BatUChar.t -> 'a) -> '-> t -> 'a
  val init : int -> (int -> BatUChar.t) -> t
  val map : (BatUChar.t -> BatUChar.t) -> t -> t
  val filter_map : (BatUChar.t -> BatUChar.t option) -> t -> t
  val filter : (BatUChar.t -> bool) -> t -> t
  val index : t -> BatUChar.t -> int
  val index_from : t -> int -> BatUChar.t -> int
  val rindex : t -> BatUChar.t -> int
  val rindex_from : t -> int -> BatUChar.t -> int
  val contains : t -> BatUChar.t -> bool
  val contains_from : t -> int -> BatUChar.t -> bool
  val rcontains_from : t -> int -> BatUChar.t -> bool
  val find : t -> t -> int
  val find_from : t -> int -> t -> int
  val rfind : t -> t -> int
  val rfind_from : t -> int -> t -> int
  val starts_with : t -> t -> bool
  val ends_with : t -> t -> bool
  val exists : t -> t -> bool
  val left : t -> int -> t
  val right : t -> int -> t
  val head : t -> int -> t
  val tail : t -> int -> t
  val strip : ?chars:BatUChar.t list -> t -> t
  val lchop : t -> t
  val rchop : t -> t
  val slice : ?first:int -> ?last:int -> t -> t
  val splice : t -> int -> int -> t -> t
  val fill : t -> int -> int -> BatUChar.t -> t
  val blit : t -> int -> t -> int -> int -> t
  val concat : t -> t list -> t
  val replace : str:t -> sub:t -> by:t -> bool * t
  val split : t -> t -> t * t
  val rsplit : t -> t -> t * t
  val nsplit : t -> t -> t list
  val compare : t -> t -> int
  val print : (t, 'a) BatIO.printer
  val read_char : BatIO.input -> BatUChar.t
  val read_text : BatIO.input -> int -> t
  val read_line : BatIO.input -> t
  val read_all : BatIO.input -> t
  val write_char : (BatUChar.t, 'a) BatIO.printer
  val write_text : (t, 'a) BatIO.printer
  val write_line : (t, 'a) BatIO.printer
  val lines_of : BatIO.input -> t BatEnum.t
  val chars_of : BatIO.input -> BatUChar.t BatEnum.t
  val output_text : unit BatIO.output -> t -> unit
  val write_lines : (t BatEnum.t, 'a) BatIO.printer
  val write_texts : (t BatEnum.t, 'a) BatIO.printer
  val write_chars : (BatUChar.t BatEnum.t, 'a) BatIO.printer
end