Methods¶
The following useful methods can be used to interact with interfaces.
cond¶
Note
cond
is also the name of a function in the 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:
>>> 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:
>>> 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 Pipelines of functions.
unwrap_or_failure¶
Unwraps either a successful or failed value.
>>> 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 bimap()
.
Here’s a full example:
>>> 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¶
partition
is used to convert
list of Unwrappable
instances like Result
,
IOResult
, and Maybe
to a tuple of two lists: successes and failures.
>>> 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¶
- cond(container_type, is_success, success_value, error_value=None)¶
Kinded version of
internal_cond()
, use it to infer real return type.- Parameters:
container_type (
type
[TypeVar
(_SingleFailableKind
, bound=SingleFailableN
)] |type
[TypeVar
(_DiverseFailableKind
, bound=DiverseFailableN
)])is_success (
bool
)success_value (
TypeVar
(_ValueType
))error_value (
Optional
[TypeVar
(_ErrorType
)])
- unwrap_or_failure(container)[source]¶
Unwraps either successful or failed value.
>>> from returns.io import IO, IOSuccess, IOFailure >>> from returns.methods import unwrap_or_failure >>> assert unwrap_or_failure(IOSuccess(1)) == IO(1) >>> assert unwrap_or_failure(IOFailure('a')) == IO('a')
- Parameters:
container (
Unwrappable
[TypeVar
(_FirstType
),TypeVar
(_SecondType
)])- Return type:
Union
[TypeVar
(_FirstType
),TypeVar
(_SecondType
)]