let starts_with = |#pfx, s| 'starts_with;
let ends_with = |#sfx, s| 'ends_with;
let contains = |#part, s| 'contains;
let strip_prefix = |#pfx, s| 'strip_prefix;
let strip_suffix = |#sfx, s| 'strip_suffix;
let trim = |s| 'trim;
let trim_start = |s| 'trim_start;
let trim_end = |s| 'trim_end;
let replace = |#pat, #rep, s| 'replace;
let dirname = |path| 'dirname;
let basename = |path| 'basename;
let join = |#sep, @args| 'string_join;
let concat = |@args| 'string_concat;
let default_escape: Escape = {
escape: "\\/\n\r\t\0",
escape_char: "\\",
tr: [("\n", "n"), ("\r", "r"), ("\t", "t"), ("\0", "0")]
};
let escape = |#esc = default_escape, s| 'string_escape;
let unescape = |#esc = default_escape, s| 'string_unescape;
let split = |#pat, s| 'string_split;
let rsplit = |#pat, s| 'string_rsplit;
let splitn = |#pat, #n, s| 'string_splitn;
let rsplitn = |#pat, #n, s| 'string_rsplitn;
let split_escaped = |#esc, #sep, s| 'string_split_escaped;
let splitn_escaped = |#n, #esc, #sep, s| 'string_splitn_escaped;
let split_once = |#pat, s| 'string_split_once;
let rsplit_once = |#pat, s| 'string_rsplit_once;
let to_lower = |s| 'string_to_lower;
let to_upper = |s| 'string_to_upper;
let sprintf = |fmt, @args| 'string_sprintf;
let len = |s| 'string_len;
let sub = |#start, #len, s| 'string_sub;
let parse = |s| 'string_parse