dry-python / dry-python/returns
Adding some utility methods to Maybe/Result
- Dominant language
- Python
- Stars
- 4.4k
- Forks
- 155
- Avg merge
- 2h 27m
- Merged PRs (30d)
- 22
Description
Have you considered adding some handy utility functions to `Maybe` and `Result`?
In using `returns` I'm missing many helpful methods you can find in Rust, for example.
Adding a few of these could increase the usability of the containers of `returns`.
Related: #1091
Here they are, in my subjective order of usefulness:
## Setdefault
Set a value if one is not yet present.
The name `setdefault` would be consistent with the python dict method.
(Although it might be good to choose another name to make clear that
the method doesn't mutate.)
```python
>>> Some(6).setdefault(7)
Some(6)
>>> Nothing.setdefault(3)
Some(3)
```
## Zip
Combine the values from two containers into a tuple, if both are successful.
```python
>>> Some(8).zip(Some(2))
Some((8, 2))
>>> Some(7).zip(Nothing)
Nothing
>>> Nothing.zip(Some(3))
Nothing
>>> Nothing.zip(Nothing)
Nothing
```
## Filter
Keep a value based on a predicate
```python
>>> Some("9").filter(str.isdigit)
Some("9")
>>> Some("foo3").filter(str.isdigit)
Nothing
>>> Nothing.filter(str.isdigit)
Nothing
```
## And
`AND` logic operation
```python
>>> Some(5).and_(Some(9))
Some(9)
>>> Some(9).and_(Nothing)
Nothing
>>> Nothing.and_(Some(8))
Nothing
```
## Or
`OR` logic operation
```python
>>> Some(5).or_(Some(9))
Some(5)
>>> Some(9).or_(Nothing)
Some(9)
>>> Nothing.or_(Some(8))
Some(8)
>>> Nothing.or_(Nothing)
Nothing
```
Contributor guide
Assessment
This issue has not been assessed yet.