I did, in fact, thought about it. It could work if `regexSwitch` only supported a single pattern. Since an important part of it's functionality is being able to match multiple patterns, making it a range poses a problem. Consider the following expression:
```D
"1a".regexSwitch!(
        `([a-z])`, (char letter) => "letter " ~ letter,
        `(\d)`, (char digit) => "digit " ~ digit)()
```
The current implementation returns a single result - `"letter a"` - since that's the first **pattern**. But if `regexSwitch` was a range function, I would expect it to return `["digit 1", "letter a"]` since the digit "1" appears before the letter "a". This would mean I'll have to check **all** patterns to see which one matches first, and than I'll have to check them again to see if there are more matches.

Now, lexers do it quite efficiently, but `regexSwitch` is not meant to be a lexer. Lexers are more complex to program and use, and take longer to compile(whether the compilation takes place in the binary's compilation or at runtime) - they are a overkill for `regexSwitch`'s usecase, which is parsing textual fields. A regex is too complex to use for such tasks...

Making it a range function will also mean I have to remove the support for default case, no-match should result in empty range. A defualt case is also something not needed for lexers but very handy for parsing textual fields.

If we want a lexer in Phobos we should get a proper lexer. `regexSwitch` will be a lousy lexer if we simply make it a range function(it needs a lot more than that to be a decent lexer), and that change will also make it a lousy textual fields parser.