sig
  type t
  type rope = Rope.t
  exception Out_of_bounds of string
  val empty : Rope.t
  val of_string : string -> Rope.t
  val of_substring : string -> int -> int -> Rope.t
  val of_char : char -> Rope.t
  val to_string : Rope.t -> string
  val is_empty : Rope.t -> bool
  val length : Rope.t -> int
  val get : Rope.t -> int -> char
  val sub : Rope.t -> int -> int -> Rope.t
  val concat2 : Rope.t -> Rope.t -> Rope.t
  val concat : Rope.t -> Rope.t list -> Rope.t
  val iter : (char -> unit) -> Rope.t -> unit
  val iteri : (int -> char -> unit) -> Rope.t -> unit
  val escaped : Rope.t -> Rope.t
  val index : Rope.t -> char -> int
  val rindex : Rope.t -> char -> int
  val index_from : Rope.t -> int -> char -> int
  val rindex_from : Rope.t -> int -> char -> int
  val contains : Rope.t -> char -> bool
  val contains_from : Rope.t -> int -> char -> bool
  val rcontains_from : Rope.t -> int -> char -> bool
  val uppercase : Rope.t -> Rope.t
  val lowercase : Rope.t -> Rope.t
  val capitalize : Rope.t -> Rope.t
  val uncapitalize : Rope.t -> Rope.t
  val compare : Rope.t -> Rope.t -> int
  val equal : Rope.t -> Rope.t -> bool
  val search_forward_string : string -> Rope.t -> int -> int
  val input_line : ?leaf_length:int -> Pervasives.in_channel -> Rope.t
  val read_line : unit -> Rope.t
  val print_string : Rope.t -> unit
  val print_endline : Rope.t -> unit
  val prerr_string : Rope.t -> unit
  val prerr_endline : Rope.t -> unit
  val output_string : Pervasives.out_channel -> Rope.t -> unit
  val output_rope : Pervasives.out_channel -> Rope.t -> unit
  val balance : Rope.t -> Rope.t
  val height : Rope.t -> int
  val rebalancing_height : int
  module Iterator :
    sig
      type t
      val make : Rope.rope -> int -> Rope.Iterator.t
      val get : Rope.Iterator.t -> char
      val peek : Rope.Iterator.t -> int -> char
      val pos : Rope.Iterator.t -> int
      val incr : Rope.Iterator.t -> unit
      val decr : Rope.Iterator.t -> unit
      val goto : Rope.Iterator.t -> int -> unit
      val move : Rope.Iterator.t -> int -> unit
      val rope : Rope.Iterator.t -> Rope.rope
    end
  module Buffer :
    sig
      type t
      val create : int -> Rope.Buffer.t
      val clear : Rope.Buffer.t -> unit
      val reset : Rope.Buffer.t -> unit
      val length : Rope.Buffer.t -> int
      val add_char : Rope.Buffer.t -> char -> unit
      val add_string : Rope.Buffer.t -> string -> unit
      val add_substring : Rope.Buffer.t -> string -> int -> int -> unit
      val add_rope : Rope.Buffer.t -> Rope.rope -> unit
      val add_channel : Rope.Buffer.t -> Pervasives.in_channel -> int -> unit
      val add_buffer : Rope.Buffer.t -> Rope.Buffer.t -> unit
      val contents : Rope.Buffer.t -> Rope.rope
      val sub : Rope.Buffer.t -> int -> int -> Rope.rope
      val nth : Rope.Buffer.t -> int -> char
    end
  module Regexp : sig  end
  module Rope_toploop :
    sig
      val printer : Format.formatter -> Rope.rope -> unit
      val max_display_length : int Pervasives.ref
      val ellipsis : string Pervasives.ref
    end
  val unsafe_of_string : string -> Rope.t
  val unsafe_of_substring : string -> int -> int -> Rope.t
  val number_leaves : Rope.t -> int
  val number_concat : Rope.t -> int
  val print : Rope.t -> unit
  val length_leaves : Rope.t -> int * int
  module IMap :
    sig
      type key = int
      type +'a t
      val empty : 'a t
      val is_empty : 'a t -> bool
      val add : key -> '-> 'a t -> 'a t
      val find : key -> 'a t -> 'a
      val remove : key -> 'a t -> 'a t
      val mem : key -> 'a t -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val map : ('-> 'b) -> 'a t -> 'b t
      val mapi : (key -> '-> 'b) -> 'a t -> 'b t
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
    end
  val distrib_leaves : Rope.t -> int Pervasives.ref Rope.IMap.t
end