<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def zip_with(fun: Callable, xs: Iterable, ys: Iterable):
 """ Fuse two Iterable object using the function `fun`. Notice that if the two objects have different len, the shortest object gives the result's shape. :param fun: function taking two argument use to process element x from `xs` and y from `ys`. :param xs: first iterable. :param ys: second iterable. returns::py:class:`PromisedObject` """

    generator = (fun(*rs) for rs in zip(xs, ys))

    return gather(*generator)