sig
  type t
  val get : UnicodeString.Type.t -> int -> UChar.t
  val init : int -> (int -> UChar.t) -> UnicodeString.Type.t
  val length : UnicodeString.Type.t -> int
  type index
  val look : UnicodeString.Type.t -> UnicodeString.Type.index -> UChar.t
  val nth : UnicodeString.Type.t -> int -> UnicodeString.Type.index
  val next :
    UnicodeString.Type.t ->
    UnicodeString.Type.index -> UnicodeString.Type.index
  val prev :
    UnicodeString.Type.t ->
    UnicodeString.Type.index -> UnicodeString.Type.index
  val out_of_range : UnicodeString.Type.t -> UnicodeString.Type.index -> bool
  val iter : (UChar.t -> unit) -> UnicodeString.Type.t -> unit
  val compare : UnicodeString.Type.t -> UnicodeString.Type.t -> int
  val first : UnicodeString.Type.t -> UnicodeString.Type.index
  val last : UnicodeString.Type.t -> UnicodeString.Type.index
  val move :
    UnicodeString.Type.t ->
    UnicodeString.Type.index -> int -> UnicodeString.Type.index
  val compare_index :
    UnicodeString.Type.t ->
    UnicodeString.Type.index -> UnicodeString.Type.index -> int
  module Buf :
    sig
      type buf
      val create : int -> UnicodeString.Type.Buf.buf
      val contents : UnicodeString.Type.Buf.buf -> UnicodeString.Type.t
      val clear : UnicodeString.Type.Buf.buf -> unit
      val reset : UnicodeString.Type.Buf.buf -> unit
      val add_char : UnicodeString.Type.Buf.buf -> UChar.t -> unit
      val add_string :
        UnicodeString.Type.Buf.buf -> UnicodeString.Type.t -> unit
      val add_buffer :
        UnicodeString.Type.Buf.buf -> UnicodeString.Type.Buf.buf -> unit
    end
end