async def first(xs, fn=lambda _: True, default=None):
    """Return the first element from async iterable that satisfies
    predicate `fn`, or `default` if no such element exists.

    Args:
        xs (AsyncIterable[Any]): async collection
        fn (Callable[[Any],bool]): predicate
        default (Any): default

    Returns:
        Any

    """
    async for i in xs:
        if fn(i):
            return i
    return default