sig
  external get : string -> int -> char = "%string_safe_get"
  external create : int -> bytes = "caml_create_string"
  val make : int -> char -> string
  val copy : string -> string
  val sub : string -> int -> int -> string
  val fill : bytes -> int -> int -> char -> unit
  val concat : string -> string list -> string
  val trim : string -> string
  val escaped : string -> string
  val index : string -> char -> int
  val rindex : string -> char -> int
  val index_from : string -> int -> char -> int
  val rindex_from : string -> int -> char -> int
  val contains : string -> char -> bool
  val contains_from : string -> int -> char -> bool
  val rcontains_from : string -> int -> char -> bool
  val uppercase : string -> string
  val lowercase : string -> string
  val capitalize : string -> string
  val uncapitalize : string -> string
  type t = string
  external unsafe_get : string -> int -> char = "%string_unsafe_get"
  external unsafe_set : bytes -> int -> char -> unit = "%string_unsafe_set"
  external unsafe_blit : string -> int -> bytes -> int -> int -> unit
    = "caml_blit_string" "noalloc"
  external unsafe_fill : bytes -> int -> int -> char -> unit
    = "caml_fill_string" "noalloc"
  type 'a gen = unit -> 'a option
  type 'a sequence = ('-> unit) -> unit
  type 'a klist = unit -> [ `Cons of 'a * 'a klist | `Nil ]
  module type S =
    sig
      type t
      val length : t -> int
      val blit : t -> int -> Bytes.t -> int -> int -> unit
      val fold : ('-> char -> 'a) -> '-> t -> 'a
      val to_gen : t -> char gen
      val to_seq : t -> char sequence
      val to_klist : t -> char klist
      val to_list : t -> char list
      val pp : Buffer.t -> t -> unit
      val print : Format.formatter -> t -> unit
    end
  val equal : string -> string -> bool
  val compare : string -> string -> int
  val hash : string -> int
  val init : int -> (int -> char) -> string
  val rev : string -> string
  val pad : ?side:[ `Left | `Right ] -> ?c:char -> int -> string -> string
  val of_char : char -> string
  val of_gen : char gen -> string
  val of_seq : char sequence -> string
  val of_klist : char klist -> string
  val of_list : char list -> string
  val of_array : char array -> string
  val to_array : string -> char array
  val find : ?start:int -> sub:string -> string -> int
  val find_all : ?start:int -> sub:string -> string -> int gen
  val find_all_l : ?start:int -> sub:string -> string -> int list
  val mem : ?start:int -> sub:string -> string -> bool
  val rfind : sub:string -> string -> int
  val replace :
    ?which:[ `All | `Left | `Right ] ->
    sub:string -> by:string -> string -> string
  val is_sub : sub:string -> int -> string -> int -> len:int -> bool
  val repeat : string -> int -> string
  val prefix : pre:string -> string -> bool
  val suffix : suf:string -> string -> bool
  val chop_prefix : pre:string -> string -> string option
  val chop_suffix : suf:string -> string -> string option
  val take : int -> string -> string
  val drop : int -> string -> string
  val take_drop : int -> string -> string * string
  val lines : string -> string list
  val lines_gen : string -> string gen
  val concat_gen : sep:string -> string gen -> string
  val unlines : string list -> string
  val unlines_gen : string gen -> string
  val set : string -> int -> char -> string
  val iter : (char -> unit) -> string -> unit
  val iteri : (int -> char -> unit) -> string -> unit
  val map : (char -> char) -> string -> string
  val mapi : (int -> char -> char) -> string -> string
  val filter_map : (char -> char option) -> string -> string
  val filter : (char -> bool) -> string -> string
  val flat_map : ?sep:string -> (char -> string) -> string -> string
  val for_all : (char -> bool) -> string -> bool
  val exists : (char -> bool) -> string -> bool
  val length : string -> int
  val blit : string -> int -> Bytes.t -> int -> int -> unit
  val fold : ('-> char -> 'a) -> '-> string -> 'a
  val to_gen : string -> char gen
  val to_seq : string -> char sequence
  val to_klist : string -> char klist
  val to_list : string -> char list
  val pp : Buffer.t -> string -> unit
  val print : Format.formatter -> string -> unit
  val map2 : (char -> char -> char) -> string -> string -> string
  val iter2 : (char -> char -> unit) -> string -> string -> unit
  val iteri2 : (int -> char -> char -> unit) -> string -> string -> unit
  val fold2 : ('-> char -> char -> 'a) -> '-> string -> string -> 'a
  val for_all2 : (char -> char -> bool) -> string -> string -> bool
  val exists2 : (char -> char -> bool) -> string -> string -> bool
  val capitalize_ascii : string -> string
  val uncapitalize_ascii : string -> string
  val uppercase_ascii : string -> string
  val lowercase_ascii : string -> string
  module Split = CCString.Split
  val compare_versions : string -> string -> int
  module Sub = CCString.Sub
end