
Generated code, sometimes including "deriving"-generated code.
On Mon, Mar 5, 2018 at 5:18 PM, Ben Franksen
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 preserved.
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?)
Cheers Ben
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net