Probably because that optimization involved a subroutine call to &quot;something expecting to return an iolist&quot;, and that subroutine is what noticed it could reuse the ampersand, then tacked on the replacement, then returned the iolist [&quot;&amp;&quot;, &quot;amp;&quot;], which the calling routine tacked on to its running list of the result, which was the final return.<p>That&#x27;s part of what makes iolists nice to work with, in the face of immutable strings in a strict language; you can make subroutine calls that may return a string or an arbitrarily nested list of strings, and you simply write code that unconditionally gathers &quot;Whatever was returned&quot; into a list, instead of sitting there appending all the time. The common &quot;concatenation&quot; operation becomes a list consing instead of a laborious copy.