sig
  type t = string
  exception Invalid of string * string
  val check : string -> string option
  val validate : string -> unit
  val encode : ?encoding:Encoding.t -> Text.t -> string
  val decode : ?encoding:Encoding.t -> string -> Text.t
  val to_ascii : Text.t -> Text.t
  val length : Text.t -> int
  val code : Text.t -> int
  val char : int -> Text.t
  val get : Text.t -> int -> Text.t
  val sub : Text.t -> int -> int -> Text.t
  val slice : Text.t -> int -> int -> Text.t
  val splice : Text.t -> int -> int -> Text.t -> Text.t
  val repeat : int -> Text.t -> Text.t
  val init : int -> (int -> Text.t) -> Text.t
  val rev_init : int -> (int -> Text.t) -> Text.t
  val upper : Text.t -> Text.t
  val lower : Text.t -> Text.t
  val capitalize : Text.t -> Text.t
  val uncapitalize : Text.t -> Text.t
  val compare : Text.t -> Text.t -> int
  val icompare : Text.t -> Text.t -> int
  val transform : Text.t -> Text.t
  val rev : Text.t -> Text.t
  val concat : Text.t -> Text.t list -> Text.t
  val rev_concat : Text.t -> Text.t list -> Text.t
  val explode : Text.t -> Text.t list
  val rev_explode : Text.t -> Text.t list
  val implode : Text.t list -> Text.t
  val rev_implode : Text.t list -> Text.t
  val is_ascii : Text.t -> bool
  val is_alnum : Text.t -> bool
  val is_alpha : Text.t -> bool
  val is_blank : Text.t -> bool
  val is_cntrl : Text.t -> bool
  val is_digit : Text.t -> bool
  val is_graph : Text.t -> bool
  val is_lower : Text.t -> bool
  val is_print : Text.t -> bool
  val is_punct : Text.t -> bool
  val is_space : Text.t -> bool
  val is_upper : Text.t -> bool
  val is_xdigit : Text.t -> bool
  val map : (Text.t -> Text.t) -> Text.t -> Text.t
  val rev_map : (Text.t -> Text.t) -> Text.t -> Text.t
  val fold : (Text.t -> '-> 'a) -> Text.t -> '-> 'a
  val rev_fold : (Text.t -> '-> 'a) -> Text.t -> '-> 'a
  val filter : (Text.t -> bool) -> Text.t -> Text.t
  val rev_filter : (Text.t -> bool) -> Text.t -> Text.t
  val iter : (Text.t -> unit) -> Text.t -> unit
  val rev_iter : (Text.t -> unit) -> Text.t -> unit
  val for_all : (Text.t -> bool) -> Text.t -> bool
  val exists : (Text.t -> bool) -> Text.t -> bool
  val count : (Text.t -> bool) -> Text.t -> int
  val words : Text.t -> Text.t list
  val lines : Text.t -> Text.t list
  val split : ?max:int -> ?sep:Text.t -> Text.t -> Text.t list
  val rev_split : ?max:int -> ?sep:Text.t -> Text.t -> Text.t list
  val replace : Text.t -> patt:Text.t -> repl:Text.t -> Text.t
  val contains : Text.t -> Text.t -> bool
  val starts_with : Text.t -> Text.t -> bool
  val ends_with : Text.t -> Text.t -> bool
  val strip : ?chars:Text.t list -> Text.t -> Text.t
  val rstrip : ?chars:Text.t list -> Text.t -> Text.t
  val lstrip : ?chars:Text.t list -> Text.t -> Text.t
  val rchop : Text.t -> Text.t
  val lchop : Text.t -> Text.t
  type pointer
  val pointer_l : Text.t -> Text.pointer
  val pointer_r : Text.t -> Text.pointer
  val pointer_at : Text.t -> int -> Text.pointer
  val next : Text.pointer -> (Text.t * Text.pointer) option
  val prev : Text.pointer -> (Text.t * Text.pointer) option
  val move : int -> Text.pointer -> Text.pointer
  val chunk : Text.pointer -> Text.pointer -> Text.t
  val offset : Text.pointer -> int
  val position : Text.pointer -> int
  val equal_at : Text.pointer -> Text.t -> bool
  val find : ?from:Text.pointer -> Text.t -> Text.t -> Text.pointer option
  val rev_find :
    ?from:Text.pointer -> Text.t -> Text.t -> Text.pointer option
end