Token clone([TokenUpdateFn? fn]) { fn = fn ?? (s, _) => s; return Token(fn(str, metadata), metadata); }