sig
  type t
  type modified
  type bytes = string
  type error =
      Unable_to_convert_to_modified_utf8 of UTF8Impl.t
    | Unable_to_convert_from_modified_utf8 of UTF8Impl.modified
    | Unable_to_convert_to_utf8 of string
    | Unable_to_convert_from_utf8 of UTF8Impl.t
    | Invalid_index of int * int
    | Index_out_of_bounds of int * int
    | Invalid_escaped_string of UTF8Impl.t
  exception Exception of UTF8Impl.error
  val string_of_error : UTF8Impl.error -> string
  val make : UCharImpl.t list -> UTF8Impl.t
  val modified_of_bytes : UTF8Impl.bytes -> UTF8Impl.modified
  val bytes_of_modified : UTF8Impl.modified -> UTF8Impl.bytes
  val to_modified : UTF8Impl.t -> UTF8Impl.modified
  val of_modified : UTF8Impl.modified -> UTF8Impl.t
  val to_string : UTF8Impl.t -> string
  val to_string_noerr : UTF8Impl.t -> string
  val of_string : string -> UTF8Impl.t
  val to_bytes : UTF8Impl.t -> UTF8Impl.bytes
  val of_bytes : UTF8Impl.bytes -> UTF8Impl.t
  val of_char : char -> UTF8Impl.t
  val of_uchar : UCharImpl.t -> UTF8Impl.t
  val length : UTF8Impl.t -> int
  val get : UTF8Impl.t -> int -> UCharImpl.t
  val equal : UTF8Impl.t -> UTF8Impl.t -> bool
  val compare : UTF8Impl.t -> UTF8Impl.t -> int
  val hash : UTF8Impl.t -> int
  val index_from : UTF8Impl.t -> int -> UCharImpl.t -> int
  val rindex_from : UTF8Impl.t -> int -> UCharImpl.t -> int
  val substring : UTF8Impl.t -> int -> int -> UTF8Impl.t
  val ( ++ ) : UTF8Impl.t -> UTF8Impl.t -> UTF8Impl.t
  val concat : UTF8Impl.t list -> UTF8Impl.t
  val concat_sep : UTF8Impl.t -> UTF8Impl.t list -> UTF8Impl.t
  val concat_sep_map :
    UTF8Impl.t -> ('-> UTF8Impl.t) -> 'a list -> UTF8Impl.t
  val replace : UCharImpl.t -> UCharImpl.t -> UTF8Impl.t -> UTF8Impl.t
  val contains : UCharImpl.t -> UTF8Impl.t -> bool
  val split : UCharImpl.t -> UTF8Impl.t -> UTF8Impl.t list
  val trim : UTF8Impl.t -> UTF8Impl.t
  val escape : UTF8Impl.t -> UTF8Impl.t
  val unescape : UTF8Impl.t -> UTF8Impl.t
  val escape_char : UCharImpl.t -> UTF8Impl.t
  external to_camomile : UTF8Impl.t -> CamomileLibrary.UTF8.t = "%identity"
  external of_camomile : CamomileLibrary.UTF8.t -> UTF8Impl.t = "%identity"
end