sig
  type t = string
  exception Invalid of string * string
  exception Out_of_bounds
  type check_result = Correct of int | Message of string
  val check : Zed_utf8.t -> Zed_utf8.check_result
  val validate : Zed_utf8.t -> int
  val next_error : Zed_utf8.t -> int -> int * int * string
  val singleton : CamomileLibrary.UChar.t -> Zed_utf8.t
  val make : int -> CamomileLibrary.UChar.t -> Zed_utf8.t
  val init : int -> (int -> CamomileLibrary.UChar.t) -> Zed_utf8.t
  val rev_init : int -> (int -> CamomileLibrary.UChar.t) -> Zed_utf8.t
  val length : Zed_utf8.t -> int
  val compare : Zed_utf8.t -> Zed_utf8.t -> int
  val get : Zed_utf8.t -> int -> CamomileLibrary.UChar.t
  val sub : Zed_utf8.t -> int -> int -> Zed_utf8.t
  val break : Zed_utf8.t -> int -> Zed_utf8.t * Zed_utf8.t
  val before : Zed_utf8.t -> int -> Zed_utf8.t
  val after : Zed_utf8.t -> int -> Zed_utf8.t
  val insert : Zed_utf8.t -> int -> Zed_utf8.t -> Zed_utf8.t
  val remove : Zed_utf8.t -> int -> int -> Zed_utf8.t
  val replace : Zed_utf8.t -> int -> int -> Zed_utf8.t -> Zed_utf8.t
  val rev : Zed_utf8.t -> Zed_utf8.t
  val concat : Zed_utf8.t -> Zed_utf8.t list -> Zed_utf8.t
  val rev_concat : Zed_utf8.t -> Zed_utf8.t list -> Zed_utf8.t
  val explode : Zed_utf8.t -> CamomileLibrary.UChar.t list
  val rev_explode : Zed_utf8.t -> CamomileLibrary.UChar.t list
  val implode : CamomileLibrary.UChar.t list -> Zed_utf8.t
  val rev_implode : CamomileLibrary.UChar.t list -> Zed_utf8.t
  val iter : (CamomileLibrary.UChar.t -> unit) -> Zed_utf8.t -> unit
  val rev_iter : (CamomileLibrary.UChar.t -> unit) -> Zed_utf8.t -> unit
  val fold : (CamomileLibrary.UChar.t -> '-> 'a) -> Zed_utf8.t -> '-> 'a
  val rev_fold :
    (CamomileLibrary.UChar.t -> '-> 'a) -> Zed_utf8.t -> '-> 'a
  val map :
    (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t) ->
    Zed_utf8.t -> Zed_utf8.t
  val rev_map :
    (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t) ->
    Zed_utf8.t -> Zed_utf8.t
  val map_concat :
    (CamomileLibrary.UChar.t -> Zed_utf8.t) -> Zed_utf8.t -> Zed_utf8.t
  val rev_map_concat :
    (CamomileLibrary.UChar.t -> Zed_utf8.t) -> Zed_utf8.t -> Zed_utf8.t
  val filter : (CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> Zed_utf8.t
  val rev_filter :
    (CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> Zed_utf8.t
  val filter_map :
    (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t option) ->
    Zed_utf8.t -> Zed_utf8.t
  val rev_filter_map :
    (CamomileLibrary.UChar.t -> CamomileLibrary.UChar.t option) ->
    Zed_utf8.t -> Zed_utf8.t
  val filter_map_concat :
    (CamomileLibrary.UChar.t -> Zed_utf8.t option) ->
    Zed_utf8.t -> Zed_utf8.t
  val rev_filter_map_concat :
    (CamomileLibrary.UChar.t -> Zed_utf8.t option) ->
    Zed_utf8.t -> Zed_utf8.t
  val for_all : (CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> bool
  val exists : (CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> bool
  val count : (CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> int
  val contains : Zed_utf8.t -> Zed_utf8.t -> bool
  val starts_with : Zed_utf8.t -> Zed_utf8.t -> bool
  val ends_with : Zed_utf8.t -> Zed_utf8.t -> bool
  val strip :
    ?predicate:(CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> Zed_utf8.t
  val lstrip :
    ?predicate:(CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> Zed_utf8.t
  val rstrip :
    ?predicate:(CamomileLibrary.UChar.t -> bool) -> Zed_utf8.t -> Zed_utf8.t
  val lchop : Zed_utf8.t -> Zed_utf8.t
  val rchop : Zed_utf8.t -> Zed_utf8.t
  val add : Buffer.t -> CamomileLibrary.UChar.t -> unit
  val escaped_char : CamomileLibrary.UChar.t -> Zed_utf8.t
  val add_escaped_char : Buffer.t -> CamomileLibrary.UChar.t -> unit
  val escaped : Zed_utf8.t -> Zed_utf8.t
  val add_escaped : Buffer.t -> Zed_utf8.t -> unit
  val escaped_string :
    CamomileLibraryDyn.Camomile.CharEncoding.t -> string -> Zed_utf8.t
  val add_escaped_string :
    Buffer.t -> CamomileLibraryDyn.Camomile.CharEncoding.t -> string -> unit
  val next : Zed_utf8.t -> int -> int
  val prev : Zed_utf8.t -> int -> int
  val extract : Zed_utf8.t -> int -> CamomileLibrary.UChar.t
  val extract_next : Zed_utf8.t -> int -> CamomileLibrary.UChar.t * int
  val extract_prev : Zed_utf8.t -> int -> CamomileLibrary.UChar.t * int
  val unsafe_next : Zed_utf8.t -> int -> int
  val unsafe_prev : Zed_utf8.t -> int -> int
  val unsafe_extract : Zed_utf8.t -> int -> CamomileLibrary.UChar.t
  val unsafe_extract_next :
    Zed_utf8.t -> int -> CamomileLibrary.UChar.t * int
  val unsafe_extract_prev :
    Zed_utf8.t -> int -> CamomileLibrary.UChar.t * int
end