let starts_with = |#pfx: string, s: string| -> bool 'str_starts_with;
let ends_with = |#sfx: string, s: string| -> bool 'str_ends_with;
let contains = |#part: string, s: string| -> bool 'str_contains;
let strip_prefix = |#pfx: string, s: string| -> Option<string> 'str_strip_prefix;
let strip_suffix = |#sfx: string, s: string| -> Option<string> 'str_strip_suffix;
let trim = |s: string| -> string 'str_trim;
let trim_start = |s: string| -> string 'str_trim_start;
let trim_end = |s: string| -> string 'str_trim_end;
let replace = |#pat: string, #rep: string, s: string| -> string 'str_replace;
let dirname = |path: string| -> Option<string> 'str_dirname;
let basename = |path: string| -> Option<string> 'str_basename;
let row_col = |path: string| -> Option<(string, string)> 'str_row_col;
let join = |#sep: string, @args: [string, Array<string>]| -> string 'str_join;
let concat = |@args: [string, Array<string>]| -> string 'str_concat;
let default_escape: Escape = {
escape: "\\/\n\r\t\0",
escape_char: "\\",
tr: [("\n", "n"), ("\r", "r"), ("\t", "t"), ("\0", "0")]
};
let escape = |#esc: Escape = default_escape, s: string| -> Result<string, `StringError(string)> 'str_escape;
let unescape = |#esc: Escape = default_escape, s: string| -> Result<string, `StringError(string)> 'str_unescape;
let split = |#pat: string, s: string| -> Array<string> 'str_split;
let rsplit = |#pat: string, s: string| -> Array<string> 'str_rsplit;
let splitn = |#pat: string, #n: i64, s: string| -> Result<Array<string>, `StringSplitError(string)> 'str_splitn;
let rsplitn = |#pat: string, #n: i64, s: string| -> Result<Array<string>, `StringSplitError(string)> 'str_rsplitn;
let split_escaped = |#esc: string, #sep: string, s: string| -> Result<Array<string>, `SplitEscError(string)> 'str_split_escaped;
let splitn_escaped = |#n: i64, #esc: string, #sep: string, s: string| -> Result<Array<string>, `SplitNEscError(string)> 'str_splitn_escaped;
let split_once = |#pat: string, s: string| -> Option<(string, string)> 'str_split_once;
let rsplit_once = |#pat: string, s: string| -> Option<(string, string)> 'str_rsplit_once;
let to_lower = |s: string| -> string 'str_to_lower;
let to_upper = |s: string| -> string 'str_to_upper;
let sprintf = |fmt: string, @args: Any| -> string 'str_sprintf;
let len = |s: string| -> i64 'str_len;
let sub = |#start: i64, #len: i64, s: string| -> Result<string, `SubError(string)> 'str_sub;
let parse = |s: string| -> Result<'b, `ParseError(string)> 'str_parse