module String: StringLabels;
let length: string => int;
let get: (string, int) => char;
String.get s n returns the character at index n in string s.
   You can also write s.[n] instead of String.get s n.
   Raise Invalid_argument if n not a valid index in s.
let set: (bytes, int, char) => unit;
BytesLabels.set.String.set s n c modifies byte sequence s in place,
   replacing the byte at index n with c.
   You can also write s.[n] <- c instead of String.set s n c.
   Raise Invalid_argument if n is not a valid index in s.
let create: int => bytes;
BytesLabels.create.String.create n returns a fresh byte sequence of length n.
   The sequence is uninitialized and contains arbitrary bytes.
   Raise Invalid_argument if n < 0 or n > Sys.max_string_length.
let make: (int, char) => string;
String.make n c returns a fresh string of length n,
   filled with the character c.
   Raise Invalid_argument if n < 0 or n > Sys.max_string_length.
let init: (int, ~f: int => char) => string;
init n f returns a string of length n,
    with character i initialized to the result of f i.
   Raise Invalid_argument if n < 0 or n > Sys.max_string_length.
let copy: string => string;
let sub: (string, ~pos: int, ~len: int) => string;
String.sub s start len returns a fresh string of length len,
   containing the substring of s that starts at position start and
   has length len.
   Raise Invalid_argument if start and len do not
   designate a valid substring of s.
let fill: (bytes, ~pos: int, ~len: int, char) => unit;
BytesLabels.fill.String.fill s start len c modifies byte sequence s in place,
   replacing len bytes by c, starting at start.
   Raise Invalid_argument if start and len do not
   designate a valid substring of s.
let blit:
  (~src: string, ~src_pos: int, ~dst: bytes, ~dst_pos: int, ~len: int) => unit;
String.blit src srcoff dst dstoff len copies len bytes
   from the string src, starting at index srcoff,
   to byte sequence dst, starting at character number dstoff.
   Raise Invalid_argument if srcoff and len do not
   designate a valid range of src, or if dstoff and len
   do not designate a valid range of dst.
let concat: (~sep: string, list(string)) => string;
String.concat sep sl concatenates the list of strings sl,
   inserting the separator string sep between each.let iter: (~f: char => unit, string) => unit;
String.iter f s applies function f in turn to all
   the characters of s.  It is equivalent to
   f s.[0]; f s.[1]; ...; f s.[String.length s - 1]; ().let iteri: (~f: (int, char) => unit, string) => unit;
String.iter, but the
   function is applied to the index of the element as first argument
   (counting from 0), and the character itself as second argument.let map: (~f: char => char, string) => string;
String.map f s applies function f in turn to all
   the characters of s and stores the results in a new string that
   is returned.let mapi: (~f: (int, char) => char, string) => string;
String.mapi f s calls f with each character of s and its
    index (in increasing index order) and stores the results in a new
    string that is returned.let trim: string => string;
' ',
   '\012', '\n', '\r', and '\t'.  If there is no leading nor
   trailing whitespace character in the argument, return the original
   string itself, not a copy.let escaped: string => string;
let index: (string, char) => int;
String.index s c returns the index of the first
   occurrence of character c in string s.
   Raise Not_found if c does not occur in s.
let rindex: (string, char) => int;
String.rindex s c returns the index of the last
   occurrence of character c in string s.
   Raise Not_found if c does not occur in s.
let index_from: (string, int, char) => int;
String.index_from s i c returns the index of the
   first occurrence of character c in string s after position i.
   String.index s c is equivalent to String.index_from s 0 c.
   Raise Invalid_argument if i is not a valid position in s.
   Raise Not_found if c does not occur in s after position i.
let rindex_from: (string, int, char) => int;
String.rindex_from s i c returns the index of the
   last occurrence of character c in string s before position i+1.
   String.rindex s c is equivalent to
   String.rindex_from s (String.length s - 1) c.
   Raise Invalid_argument if i+1 is not a valid position in s.
   Raise Not_found if c does not occur in s before position i+1.
let contains: (string, char) => bool;
String.contains s c tests if character c
   appears in the string s.let contains_from: (string, int, char) => bool;
String.contains_from s start c tests if character c
   appears in s after position start.
   String.contains s c is equivalent to
   String.contains_from s 0 c.
   Raise Invalid_argument if start is not a valid position in s.
let rcontains_from: (string, int, char) => bool;
String.rcontains_from s stop c tests if character c
   appears in s before position stop+1.
   Raise Invalid_argument if stop < 0 or stop+1 is not a valid
   position in s.
let uppercase: string => string;
let lowercase: string => string;
let capitalize: string => string;
let uncapitalize: string => string;
type t = string;
let compare: (t, t) => int;
Pervasives.compare.  Along with the type t, this function compare
    allows the module String to be passed as argument to the functors
    Set.Make and Map.Make.