.. _methods: Methods ========= The following useful methods can be used to interact with interfaces. cond ---- .. note:: ``cond`` is also the name of a function in the :ref:`pointfree` module. Therefore we encourage to import the modules ``pointfree`` and ``methods`` directly instead of their functions. Reduce the boilerplate when choosing paths with ``DiverseFailableN``. Think of this method as a functional ``if`` alternative for successful or failed types. So, this code: .. code:: python >>> from returns.result import Failure, Result, Success >>> def is_numeric(string: str) -> Result[str, str]: ... if string.isnumeric(): ... return Success('It is a number') ... return Failure('It is not a number') Can be replaced with this: .. code:: python >>> from returns import methods >>> from returns.result import Failure, Result, Success >>> def is_numeric(string: str) -> Result[str, str]: ... return methods.cond( ... Result, ... string.isnumeric(), ... 'It is a number', ... 'It is not a number', ... ) >>> assert is_numeric('42') == Success('It is a number') >>> assert is_numeric('text') == Failure('It is not a number') Why is it helpful? Because ``cond`` can be easily added into a :ref:`pipelines` of functions. unwrap_or_failure ----------------- Unwraps either a successful or failed value. .. code:: python >>> from returns.io import IO, IOSuccess, IOFailure >>> from returns import methods >>> assert methods.unwrap_or_failure(IOSuccess(1)) == IO(1) >>> assert methods.unwrap_or_failure(IOFailure('a')) == IO('a') Useful when you have a ``ResultLike`` value with correctly handled error value, for example with :func:`~returns.pointfree.bimap.bimap`. Here's a full example: .. code:: python >>> from returns.result import Failure, Result, Success >>> from returns import methods, pointfree >>> instance: Result[int, str] = Success(1) >>> error_handled = pointfree.bimap(lambda inr: inr + 1, lambda _: 0)(instance) >>> assert isinstance(methods.unwrap_or_failure(error_handled), int) partition ~~~~~~~~~ :func:`partition ` is used to convert list of :class:`~returns.interfaces.Unwrappable` instances like :class:`~returns.result.Result`, :class:`~returns.io.IOResult`, and :class:`~returns.maybe.Maybe` to a tuple of two lists: successes and failures. .. code:: python >>> from returns.result import Failure, Success >>> from returns.methods import partition >>> results = [Success(1), Failure(2), Success(3), Failure(4)] >>> partition(results) ([1, 3], [2, 4]) API Reference ------------- .. autofunction:: returns.methods.cond .. autofunction:: returns.methods.unwrap_or_failure