@sig(H/ (H/ "a" >> "b" >> "c") >> ["a"] >> ["b"] >> ["c"])
def zipWith(fn, xs, ys):
    """
    zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]

    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.
    """
    return L[(fn(*s) for s in zip(xs, ys))]
dataset/ETHPy150Open billpmurphy/hask/hask/Data/List.py/zipWith/original