sig
  type t = private string
  exception Malformed_code
  val validate : string -> unit
  val append : BatUTF8.t -> BatUTF8.t -> BatUTF8.t
  val empty : BatUTF8.t
  val of_char : BatCamomile.UChar.t -> BatUTF8.t
  val make : int -> BatCamomile.UChar.t -> BatUTF8.t
  val of_string : string -> BatUTF8.t
  val to_string : BatUTF8.t -> string
  val adopt : string -> BatUTF8.t
  val enum : BatUTF8.t -> BatCamomile.UChar.t BatEnum.t
  val of_enum : BatCamomile.UChar.t BatEnum.t -> BatUTF8.t
  val backwards : BatUTF8.t -> BatCamomile.UChar.t BatEnum.t
  val of_backwards : BatCamomile.UChar.t BatEnum.t -> BatUTF8.t
  val sub : BatUTF8.t -> int -> int -> BatUTF8.t
  val get : BatUTF8.t -> int -> BatCamomile.UChar.t
  val init : int -> (int -> BatCamomile.UChar.t) -> t
  val length : BatUTF8.t -> int
  val length0 : int -> int
  type char_idx = int
  module Byte :
    sig
      type b_idx
      val of_int_unsafe : int -> BatUTF8.Byte.b_idx
      val to_int : BatUTF8.Byte.b_idx -> int
      val next : BatUTF8.t -> BatUTF8.Byte.b_idx -> BatUTF8.Byte.b_idx
      val prev : BatUTF8.t -> BatUTF8.Byte.b_idx -> BatUTF8.Byte.b_idx
      val of_char_idx : BatUTF8.t -> BatUTF8.char_idx -> BatUTF8.Byte.b_idx
      val at_end : BatUTF8.t -> BatUTF8.Byte.b_idx -> bool
      val out_of_range : BatUTF8.t -> BatUTF8.Byte.b_idx -> bool
      val first : BatUTF8.Byte.b_idx
      val last : BatUTF8.t -> BatUTF8.Byte.b_idx
      val move : BatUTF8.t -> BatUTF8.Byte.b_idx -> int -> BatUTF8.Byte.b_idx
    end
  type index = int
  val look : BatUTF8.t -> BatUTF8.Byte.b_idx -> BatCamomile.UChar.t
  val out_of_range : BatUTF8.t -> BatUTF8.Byte.b_idx -> bool
  val compare_index : BatUTF8.t -> BatUTF8.index -> BatUTF8.index -> int
  val next : BatUTF8.t -> BatUTF8.index -> BatUTF8.index
  val prev : BatUTF8.t -> BatUTF8.index -> BatUTF8.index
  val move : BatUTF8.t -> BatUTF8.index -> int -> BatUTF8.index
  val iter : (BatCamomile.UChar.t -> unit) -> BatUTF8.t -> unit
  val compare : BatUTF8.t -> BatUTF8.t -> int
  val concat : BatUTF8.t -> BatUTF8.t list -> BatUTF8.t
  val join : BatUTF8.t -> BatUTF8.t list -> BatUTF8.t
  val uppercase : BatUTF8.t -> BatUTF8.t
  val lowercase : BatUTF8.t -> BatUTF8.t
  val init : int -> (int -> BatCamomile.UChar.t) -> BatUTF8.t
  val map :
    (BatCamomile.UChar.t -> BatCamomile.UChar.t) -> BatUTF8.t -> BatUTF8.t
  val filter_map :
    (BatCamomile.UChar.t -> BatCamomile.UChar.t option) ->
    BatUTF8.t -> BatUTF8.t
  val filter : (BatCamomile.UChar.t -> bool) -> BatUTF8.t -> BatUTF8.t
  val index : BatUTF8.t -> BatCamomile.UChar.t -> int
  val rindex : BatUTF8.t -> BatCamomile.UChar.t -> int
  val contains : BatUTF8.t -> BatCamomile.UChar.t -> bool
  val contains_from :
    BatUTF8.t -> BatCamomile.UChar.t -> BatUTF8.Byte.b_idx -> bool
  val rcontains_from :
    BatUTF8.t -> BatCamomile.UChar.t -> BatUTF8.Byte.b_idx -> bool
  val escaped : BatUTF8.t -> BatUTF8.t
  module Buf :
    sig
      type buf = Buffer.t
      val create : int -> BatUTF8.Buf.buf
      val contents : BatUTF8.Buf.buf -> BatUTF8.t
      val clear : BatUTF8.Buf.buf -> unit
      val reset : BatUTF8.Buf.buf -> unit
      val add_char : BatUTF8.Buf.buf -> BatCamomile.UChar.t -> unit
      val add_string : BatUTF8.Buf.buf -> BatUTF8.t -> unit
      val add_buffer : BatUTF8.Buf.buf -> BatUTF8.Buf.buf -> unit
    end
  val print : 'BatInnerIO.output -> BatUTF8.t -> unit
  val t_printer : BatUTF8.t BatValue_printer.t
  external of_string_unsafe : string -> BatUTF8.t = "%identity"
  external to_string_unsafe : BatUTF8.t -> string = "%identity"
  val unsafe_get : BatUTF8.t -> int -> BatCamomile.UChar.t
  val copy_set : BatUTF8.t -> int -> BatCamomile.UChar.t -> BatUTF8.t
end