sig
  type mutability = [ `Immutable | `Mutable ]
  type 'a text
  type utext = [ `Immutable ] UText.text
  type ustring = [ `Mutable ] UText.text
  type t = UText.utext
  val utext_of_ustring : UText.ustring -> UText.utext
  val ustring_of_utext : UText.utext -> UText.ustring
  val get : 'UText.text -> int -> UChar.t
  val set : UText.ustring -> int -> UChar.t -> unit
  type index
  val look : 'UText.text -> UText.index -> UChar.t
  val nth : 'UText.text -> int -> UText.index
  val first : 'UText.text -> UText.index
  val last : 'UText.text -> UText.index
  val out_of_range : 'UText.text -> UText.index -> bool
  val compare_index : 'UText.text -> UText.index -> UText.index -> int
  val next : 'UText.text -> UText.index -> UText.index
  val prev : 'UText.text -> UText.index -> UText.index
  val move : 'UText.text -> UText.index -> int -> UText.index
  val length : 'UText.text -> int
  val of_string : string -> UText.utext
  val init : int -> (int -> UChar.t) -> UText.utext
  val init_ustring : int -> (int -> UChar.t) -> UText.ustring
  val make : int -> UChar.t -> UText.ustring
  val copy : UText.ustring -> UText.ustring
  val sub : 'UText.text -> int -> int -> 'UText.text
  val fill : UText.ustring -> int -> int -> UChar.t -> unit
  val blit : 'UText.text -> int -> UText.ustring -> int -> int -> unit
  val append : 'UText.text -> 'UText.text -> 'UText.text
  val iter : (UChar.t -> unit) -> 'UText.text -> unit
  val compare : 'UText.text -> 'UText.text -> int
  module Buf :
    sig
      type buf
      val create : int -> UText.Buf.buf
      val contents : UText.Buf.buf -> UText.t
      val contents_string : UText.Buf.buf -> UText.ustring
      val length : UText.Buf.buf -> int
      val clear : UText.Buf.buf -> unit
      val reset : UText.Buf.buf -> unit
      val add_char : UText.Buf.buf -> UChar.t -> unit
      val add_string : UText.Buf.buf -> 'UText.text -> unit
      val add_buffer : UText.Buf.buf -> UText.Buf.buf -> unit
    end
end