Source code for returns._generated.pointfree.bind_future_result

def _bind_future_result(function):
    """
    Lifts ``FutureResult`` function to be wrapped in other container.

    In other words, it modifies the function's
    signature from: ``a -> FutureResult[b, c]``
    to: ``Container[a, c] -> Container[b, c]``

    This is how it should be used:

    .. code:: python

        >>> import anyio
        >>> from returns.future import FutureResultE
        >>> from returns.context import ReaderFutureResultE
        >>> from returns.io import IOSuccess, IOFailure
        >>> from returns.pointfree import bind_future_result

        >>> def example(argument: int) -> FutureResultE[float]:
        ...     return FutureResultE.from_value(argument / 2)

        >>> assert anyio.run(bind_future_result(example)(
        ...     ReaderFutureResultE.from_value(1),
        ... ), ReaderFutureResultE.empty) == IOSuccess(0.5)

        >>> assert anyio.run(bind_future_result(example)(
        ...     ReaderFutureResultE.from_failure(':('),
        ... ), ReaderFutureResultE.empty) == IOFailure(':(')

    """
    return lambda container: container.bind_future_result(function)