Source code for returns._generated.pointfree.unify

def _unify(function):
    """
    Turns function's input parameter from a regular value to a container.

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

    Similar to :func:`returns.pointfree.bind`,
    but unifies the result error type to become
    ``Union[_ErrorType, _NewErrorType]``.

    Similar to :func:`returns.pointfree.rescue`,
    but works for successful containers.

    This is how it should be used:

    .. code:: python

      >>> from returns.pointfree import unify
      >>> from returns.result import Success, Result, Failure

      >>> def example(argument: int) -> Result[int, str]:
      ...     return Success(argument + 1)

      >>> assert unify(example)(Success(1)) == Success(2)
      >>> assert unify(example)(Failure('a')) == Failure('a')

    Note, that this function works for all containers with ``.unify`` method.
    See :class:`returns.primitives.interfaces.Bindable` for more info.

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