sig
  type t = string
  exception Malformed_code
  val validate : UTF8.t -> unit
  val get : UTF8.t -> int -> UChar.uchar
  val init : int -> (int -> UChar.uchar) -> UTF8.t
  val length : UTF8.t -> int
  type index = int
  val nth : UTF8.t -> int -> UTF8.index
  val last : UTF8.t -> UTF8.index
  val look : UTF8.t -> UTF8.index -> UChar.uchar
  val substring : UTF8.t -> int -> int -> UTF8.t
  val out_of_range : UTF8.t -> UTF8.index -> bool
  val compare_index : UTF8.t -> UTF8.index -> UTF8.index -> int
  val next : UTF8.t -> UTF8.index -> UTF8.index
  val prev : UTF8.t -> UTF8.index -> UTF8.index
  val move : UTF8.t -> UTF8.index -> int -> UTF8.index
  val iter : (UChar.uchar -> unit) -> UTF8.t -> unit
  val compare : UTF8.t -> UTF8.t -> int
  module Buf :
    sig
      type buf
      val create : int -> UTF8.Buf.buf
      val contents : UTF8.Buf.buf -> UTF8.t
      val clear : UTF8.Buf.buf -> unit
      val reset : UTF8.Buf.buf -> unit
      val add_char : UTF8.Buf.buf -> UChar.uchar -> unit
      val add_string : UTF8.Buf.buf -> UTF8.t -> unit
      val add_buffer : UTF8.Buf.buf -> UTF8.Buf.buf -> unit
    end
end