zipWith generalises
zip by zipping with
the function given as the first argument, instead of a tupling
function. For example,
zipWith (+) is applied to two
lists to produce the list of corresponding sums:
>>> zipWith (+) [1, 2, 3] [4, 5, 6]
[5,7,9]
zipWith is right-lazy:
zipWith f [] _|_ = []
zipWith is capable of list fusion, but it is restricted to its
first list argument and its resulting list.