Decorator that calls `_gather` on the instance the wrapped function is
    bound to (should be an `Ingredient`) and yields from the returned
    generator.

    This function is necessary, because `Ingredient._gather` cannot directly be
    used as a decorator inside of `Ingredient`.

def gather_from_ingredients(wrapped, instance=None, args=None, kwargs=None):
    """
    Decorator that calls `_gather` on the instance the wrapped function is
    bound to (should be an `Ingredient`) and yields from the returned
    generator.

    This function is necessary, because `Ingredient._gather` cannot directly be
    used as a decorator inside of `Ingredient`.
    """
    for item in instance._gather(wrapped):
        yield item