sig
  type elt = Unicode.utf8_char
  type t = bytes
  val compare : Unicode.UTF8_Bytes.t -> Unicode.UTF8_Bytes.t -> int
  val equal : Unicode.UTF8_Bytes.t -> Unicode.UTF8_Bytes.t -> bool
  external length : Unicode.UTF8_Bytes.t -> int = "%bytes_length"
  external get : Unicode.UTF8_Bytes.t -> int -> Unicode.UTF8_Bytes.elt
    = "%bytes_safe_get"
  external unsafe_get : Unicode.UTF8_Bytes.t -> int -> Unicode.UTF8_Bytes.elt
    = "%bytes_unsafe_get"
  external set :
    Unicode.UTF8_Bytes.t -> int -> Unicode.UTF8_Bytes.elt -> unit
    = "%bytes_safe_set"
  external unsafe_set :
    Unicode.UTF8_Bytes.t -> int -> Unicode.UTF8_Bytes.elt -> unit
    = "%bytes_unsafe_set"
  val empty : Unicode.UTF8_Bytes.t
  external create : int -> Unicode.UTF8_Bytes.t = "caml_create_bytes"
  val copy : Unicode.UTF8_Bytes.t -> Unicode.UTF8_Bytes.t
  val cat :
    Unicode.UTF8_Bytes.t -> Unicode.UTF8_Bytes.t -> Unicode.UTF8_Bytes.t
  val sub : Unicode.UTF8_Bytes.t -> int -> int -> Unicode.UTF8_Bytes.t
  val fill :
    Unicode.UTF8_Bytes.t -> int -> int -> Unicode.UTF8_Bytes.elt -> unit
  external unsafe_fill :
    Unicode.UTF8_Bytes.t -> int -> int -> Unicode.UTF8_Bytes.elt -> unit
    = "caml_fill_bytes" [@@noalloc]
  val blit :
    Unicode.UTF8_Bytes.t -> int -> Unicode.UTF8_Bytes.t -> int -> int -> unit
  external unsafe_blit :
    Unicode.UTF8_Bytes.t -> int -> Unicode.UTF8_Bytes.t -> int -> int -> unit
    = "caml_blit_bytes" [@@noalloc]
  val lead : Unicode.UTF8_Bytes.t -> int -> int
  val rear : Unicode.UTF8_Bytes.t -> int -> int
  val get_code :
    fail:(Unicode.UTF8_Bytes.t ->
          int -> int -> [> Unicode.utf8_decode_error ] -> Stdlib.Uchar.t) ->
    Unicode.UTF8_Bytes.t -> int Stdlib.ref -> Stdlib.Uchar.t
  val set_code :
    fail:(Unicode.UTF8_Bytes.t -> int -> [> `unexist ] -> Stdlib.Uchar.t) ->
    Unicode.UTF8_Bytes.t -> int Stdlib.ref -> Stdlib.Uchar.t -> unit
  val of_array : Unicode.UTF8_Bytes.elt array -> Unicode.UTF8_Bytes.t
end