[Haskell-cafe] missing optimization for (++)
ben.franksen at online.de
Mon Mar 5 22:18:12 UTC 2018
Am 05.03.2018 um 13:40 schrieb Li-yao Xia:
> On 03/05/2018 07:13 AM, Ben Franksen wrote:
>> Okay, okay, I got it. I did not think about strictness when I asked. The
>> funny thing is that the two fusion rules combined, as explained by
>> Josef, seem to cause this shortcut to be taken. But that can't be true
>> because (++) really is non-strict, I tested that, with -O2. How do you
>> explain that?
> Rewrite rules apply at compile time and don't force any computation.
> The second rule fires only if the second argument of (++) is
> syntactically . Otherwise the code doesn't change, and strictness is
Thanks, yet another thing learned. So
let ys =  in xs ++ ys
will traverse the spine of xs but
xs ++ 
will not. Interesting.
(But who writes something like "xs ++ " in a real program?)
More information about the Haskell-Cafe