Why are there two calls to seq in the code below (sourced from here) - r is passed twice:
first' :: (a -> b) -> (a, c) -> (b, c)
first' f (x,y) = let { x' = f x; r = (x', y) }
in x' `seq` r `seq` r
I would think that one call to seq would do the trick of making it strict.