
11 Dec
2018
11 Dec
'18
1:55 a.m.
I was reading this article https://wiki.haskell.org/Correctness_of_short_cut_fusion on the Haskell wiki. It presents an example (2.1.2) where destroy/unfoldr fusion behaves oddly. If I use a lazier definition of unfoldr, then this problem goes away: unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b = case f b of Nothing -> [] Just z -> fst z : unfoldr f (snd z)
Does this mean unfoldr is 'too strict'? Or is there a good reason for not writing it this way (performance, perhaps?)