sig
  type t = BatRope.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_ustring : BatUTF8.t -> t
  val to_ustring : t -> BatUTF8.t
  val of_uchar : BatCamomile.UChar.t -> t
  val of_char : char -> t
  val make : int -> BatCamomile.UChar.t -> t
  val lowercase : t -> t
  val uppercase : t -> t
  val capitalize : t -> t
  val uncapitalize : t -> t
  val join : t -> t list -> t
  val explode : t -> BatCamomile.UChar.t list
  val implode : BatCamomile.UChar.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 : BatCamomile.UChar.t -> t -> t
  val prepend_char : BatCamomile.UChar.t -> t -> t
  val get : t -> int -> BatCamomile.UChar.t
  val set : t -> int -> BatCamomile.UChar.t -> t
  val sub : t -> int -> int -> t
  val insert : int -> t -> t -> t
  val remove : int -> int -> t -> t
  val concat : t -> t list -> t
  val iter : (BatCamomile.UChar.t -> unit) -> t -> unit
  val iteri : ?base:int -> (int -> BatCamomile.UChar.t -> unit) -> t -> unit
  val range_iter : (BatCamomile.UChar.t -> unit) -> int -> int -> t -> unit
  val range_iteri :
    (int -> BatCamomile.UChar.t -> unit) ->
    ?base:int -> int -> int -> t -> unit
  val bulk_iter : (BatUTF8.t -> unit) -> t -> unit
  val bulk_iteri : ?base:int -> (int -> BatUTF8.t -> unit) -> t -> unit
  val fold : ('-> BatCamomile.UChar.t -> 'a) -> '-> t -> 'a
  val bulk_fold : ('-> BatUTF8.t -> 'a) -> '-> t -> 'a
  val enum : t -> BatCamomile.UChar.t BatEnum.t
  val bulk_enum : t -> BatUTF8.t BatEnum.t
  val of_enum : BatCamomile.UChar.t BatEnum.t -> t
  val of_bulk_enum : BatUTF8.t BatEnum.t -> t
  val backwards : t -> BatCamomile.UChar.t BatEnum.t
  val of_backwards : BatCamomile.UChar.t BatEnum.t -> t
  val init : int -> (int -> BatCamomile.UChar.t) -> t
  val of_int : int -> t
  val of_float : float -> t
  val to_int : t -> int
  val to_float : t -> float
  val bulk_map : (BatUTF8.t -> BatUTF8.t) -> t -> t
  val map : (BatCamomile.UChar.t -> BatCamomile.UChar.t) -> t -> t
  val bulk_filter_map : (BatUTF8.t -> BatUTF8.t option) -> t -> t
  val filter_map :
    (BatCamomile.UChar.t -> BatCamomile.UChar.t option) -> t -> t
  val filter : (BatCamomile.UChar.t -> bool) -> t -> t
  val index : t -> BatCamomile.UChar.t -> int
  val index_from : t -> int -> BatCamomile.UChar.t -> int
  val rindex : t -> BatCamomile.UChar.t -> int
  val rindex_from : t -> int -> BatCamomile.UChar.t -> int
  val contains : t -> BatCamomile.UChar.t -> bool
  val contains_from : t -> int -> BatCamomile.UChar.t -> bool
  val rcontains_from : t -> int -> BatCamomile.UChar.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 trim : t -> t
  val left : t -> int -> t
  val right : t -> int -> t
  val head : t -> int -> t
  val tail : t -> int -> t
  val strip : ?chars:BatCamomile.UChar.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 -> BatCamomile.UChar.t -> t
  val blit : t -> int -> t -> int -> int -> t
  val concat : t -> t list -> t
  val escaped : t -> t
  val replace_chars : (BatCamomile.UChar.t -> BatUTF8.t) -> t -> 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 icompare : t -> t -> int
  module IRope : sig type t = t val compare : t -> t -> int end
  val print : 'BatInnerIO.output -> t -> unit
  val t_printer : t BatValue_printer.t
end