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