# Talk:Correctness of short cut fusion

### From HaskellWiki

If unfoldr would use a lazy pattern match:

unfoldr :: (b -> Maybe (a,b)) -> b -> [a] unfoldr p e = case p e of Nothing -> [] Just ~(x,e') -> x:unfoldr p e'

the left hand side of the example without seq will be the same as the right hand side:

destroy g (unfoldr p e) = g step (unfoldr p e) = case step (unfoldr p e) of Just z -> 0 = case step (case p e of Nothing -> [] Just ~(x,e') -> x:unfoldr p e') of Just z -> 0 = case step (case Just undefined of Nothing -> [] Just ~(x,e') -> x:unfoldr p e') of Just z -> 0 = case step (undefined:unfoldr p undefined) of Just z -> 0 = case Just (undefined,unfoldr p undefined) of Just z -> 0 = 0

--Twanvl 12:18, 13 February 2007 (UTC)

## Details about what uses of seq are dangerous

If I understand things properly, the essential problem withseq

foldr/build

g :: forall b . (a -> b -> b) -> b -> b g cons nil = ...

b

cons

seq

g

b

unfoldr

build

seq

unfoldr