sig
  type xstring
  type t = Main.Type.XString.xstring
  val get : Main.Type.XString.xstring -> int -> Main.Type.UChar.t
  val set : Main.Type.XString.xstring -> int -> Main.Type.UChar.t -> unit
  val length : Main.Type.XString.xstring -> int
  val init : int -> (int -> Main.Type.UChar.t) -> Main.Type.XString.xstring
  type index
  val look :
    Main.Type.XString.xstring -> Main.Type.XString.index -> Main.Type.UChar.t
  val nth : Main.Type.XString.xstring -> int -> Main.Type.XString.index
  val first : Main.Type.XString.xstring -> Main.Type.XString.index
  val last : Main.Type.XString.xstring -> Main.Type.XString.index
  val out_of_range :
    Main.Type.XString.xstring -> Main.Type.XString.index -> bool
  val next :
    Main.Type.XString.xstring ->
    Main.Type.XString.index -> Main.Type.XString.index
  val prev :
    Main.Type.XString.xstring ->
    Main.Type.XString.index -> Main.Type.XString.index
  val move :
    Main.Type.XString.xstring ->
    Main.Type.XString.index -> int -> Main.Type.XString.index
  val compare_index :
    Main.Type.XString.xstring ->
    Main.Type.XString.index -> Main.Type.XString.index -> int
  val make :
    ?bufsize:int -> int -> Main.Type.UChar.t -> Main.Type.XString.xstring
  val clear : Main.Type.XString.xstring -> unit
  val reset : Main.Type.XString.xstring -> unit
  val copy : Main.Type.XString.xstring -> Main.Type.XString.xstring
  val sub :
    Main.Type.XString.xstring -> int -> int -> Main.Type.XString.xstring
  val add_char : Main.Type.XString.xstring -> Main.Type.UChar.t -> unit
  val add_text : Main.Type.XString.xstring -> 'Main.Type.UText.text -> unit
  val add_xstring :
    Main.Type.XString.xstring -> Main.Type.XString.xstring -> unit
  val shrink : Main.Type.XString.xstring -> int -> unit
  val append :
    Main.Type.XString.xstring ->
    Main.Type.XString.xstring -> Main.Type.XString.xstring
  val utext_of : Main.Type.XString.xstring -> Main.Type.UText.t
  val ustring_of : Main.Type.XString.xstring -> Main.Type.UText.ustring
  val iter : (Main.Type.UChar.t -> unit) -> Main.Type.XString.xstring -> unit
  val compare : Main.Type.XString.t -> Main.Type.XString.t -> int
  module Buf :
    sig
      type buf
      val create : int -> Main.Type.XString.Buf.buf
      val contents : Main.Type.XString.Buf.buf -> Main.Type.XString.t
      val length : Main.Type.XString.Buf.buf -> int
      val clear : Main.Type.XString.Buf.buf -> unit
      val reset : Main.Type.XString.Buf.buf -> unit
      val add_char : Main.Type.XString.Buf.buf -> Main.Type.UChar.t -> unit
      val add_string :
        Main.Type.XString.Buf.buf -> Main.Type.XString.t -> unit
      val add_buffer :
        Main.Type.XString.Buf.buf -> Main.Type.XString.Buf.buf -> unit
    end
end