concatenation is much simpler now, it's simply replacing the old values with new ones. Yes, currently this does use an array of indices rather than clever math, but I think it's easier to reason about it this way, and it is less work. Plus, short of not having existing tests fail, there's no reason to append an extra empty string to the end of `separators`, or to have `separators` at all