{- Decide whether these three definitions of zipW are identical. If not, give an example evaluating differently. -} zipW1 f _ [] = [] zipW1 f [] _ = [] zipW1 f (x:xs) (y:ys) = f x y : zipW1 f xs ys zipW2 f (x:xs) (y:ys) = f x y : zipW2 f xs ys zipW2 f _ _ = [] zipW3 f [] _ = [] zipW3 f _ [] = [] zipW3 f (x:xs) (y:ys) = f x y : zipW3 f xs ys {- Scroll down for solution! -} {- zipW1 is different from zipW2 and zipW3, which have identical results. With the input (,) undefined [] we get [] for zipW1 and Exception: Prelude.undefined for zipW2 and zipW3. -}