Whoops!
Thanks for the correction. My apologies.
Well, one other possible explanation I can think of is that, if
concatenation were to produce a mutable result then (for example)
tolower(a~b)
wouldn't compile, because the argument to tolower() needs to be
invariant. That's kind of a lame argument though.