zipWith : Constrói uma lista cujos elementos são calculados por uma função que é aplicada a argumentos que vêm de duas listas
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith f (x:xs) (y:ys) = f x y : zipWith xs ys
zipWith _ _ _ = []
> zipWith div [10,20..50] [1..]
[10,10,10,10,10]
> zipWith (^) [1..5] [2,2..]
[1,4,9,16,25]
> map (uncurry (^)) (zip [1..5] [2,2..])
[1,4,9,16,25]