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