>>> zip [1, 2] ['a', 'b'] [(1,'a'),(2,'b')]If one input list is shorter than the other, excess elements of the longer list are discarded, even if one of the lists is infinite:
>>> zip [1] ['a', 'b'] [(1,'a')] >>> zip [1, 2] ['a'] [(1,'a')] >>> zip [] [1..] [] >>> zip [1..] [] []zip is right-lazy:
>>> zip [] undefined [] >>> zip undefined [] *** Exception: Prelude.undefined ...zip is capable of list fusion, but it is restricted to its first list argument and its resulting list.
zipWith (,) xs ys == zip xs ys zipWith f [x1,x2,x3..] [y1,y2,y3..] == [f x1 y1, f x2 y2, f x3 y3..]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:
>>> let f = undefined >>> zipWith f [] undefined []zipWith is capable of list fusion, but it is restricted to its first list argument and its resulting list.
zipWith3 (,,) xs ys zs == zip3 xs ys zs zipWith3 f [x1,x2,x3..] [y1,y2,y3..] [z1,z2,z3..] == [f x1 y1 z1, f x2 y2 z2, f x3 y3 z3..]
>>> unzip [] ([],[]) >>> unzip [(1, 'a'), (2, 'b')] ([1,2],"ab")