IMO the root cause of this problem is something else.
The problem is that we're trying to use slices as ranges, and they don't fit in the model.
e.g.: If you're using immutable(char)[] to represent a string, you're /going/ to run into problems like this (like we already have).
The right thing to do would be to have a separate string type, which keeps its front() result, and whatever other information it might need. Ditto for other types.
Yes, this is a breaking change, a pretty significant one. But it IS the root cause of the problem.