Skip to content

Commit 327b53c

Browse files
committed
Closes #254
1 parent dbbbaa3 commit 327b53c

File tree

7 files changed

+83
-3
lines changed

7 files changed

+83
-3
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ See [0Ver](https://0ver.org/).
2323

2424
- Adds `RequiresContextResult` container
2525
- Adds `RequiresContextResultE` alias
26+
- Adds `ReaderResult` and `ReaderResultE` aliases
2627
for `RequiresContextResult[..., ..., Exception]`
2728
- Adds `RequiresContextResult` support for `bind` and `rescue`
2829
- Adds `RequiresContextResult` support for `flatten`
@@ -37,6 +38,7 @@ See [0Ver](https://0ver.org/).
3738

3839
- Adds `RequiresContextIOResult` container
3940
- Adds `RequiresContextIOResultE` alias
41+
- Adds `ReaderIOResult` and `ReaderIOResultE` aliases
4042
for `RequiresContextIOResult[..., ..., Exception]`
4143
- Adds `RequiresContextIOResult` support for `bind` and `rescue`
4244
- Adds `RequiresContextIOResult` support for `flatten`

docs/pages/context.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,32 @@ Use it when you work with impure context-related functions that might fail.
306306
This is basically **the main type** that is going to be used in most apps.
307307

308308

309+
Aliases
310+
-------
311+
312+
There are several useful alises for ``RequiresContext``
313+
and friends with some common values:
314+
315+
- :attr:`returns.context.requires_context_result.ReaderResult`
316+
is an alias for ``RequiresContextResult[...]`` to save you some typing.
317+
Uses ``Reader`` because it is a native name for this concept from Haskell.
318+
- :attr:`returns.result.requires_context.ReaderResultE`
319+
is an alias for ``RequiresContextResult[..., Exception]``,
320+
just use it when you want to work with ``RequiresContextResult`` containers
321+
that use exceptions as error type.
322+
It is named ``ResultE`` because it is ``ResultException``
323+
and ``ResultError`` at the same time.
324+
- :attr:`returns.context.requires_context_io_result.ReaderIOResult`
325+
is an alias for ``RequiresContextIOResult[...]`` to save you some typing.
326+
Uses ``Reader`` because it is a native name for this concept from Haskell.
327+
- :attr:`returns.result.requires_context.ReaderIOResultE`
328+
is an alias for ``RequiresContextIOResult[..., Exception]``,
329+
just use it when you want to work with ``RequiresContextIOResult`` containers
330+
that use exceptions as error type.
331+
It is named ``ResultE`` because it is ``ResultException``
332+
and ``ResultError`` at the same time.
333+
334+
309335
FAQ
310336
---
311337

returns/context/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@
1414
ContextResult as ContextResult,
1515
RequiresContextResult as RequiresContextResult,
1616
RequiresContextResultE as RequiresContextResultE,
17+
ReaderResult as ReaderResult,
18+
ReaderResultE as ReaderResultE,
1719
)
1820
from returns.context.requires_context_io_result import ( # noqa: F401
1921
ContextIOResult as ContextIOResult,
2022
RequiresContextIOResult as RequiresContextIOResult,
2123
RequiresContextIOResultE as RequiresContextIOResultE,
24+
ReaderIOResult as ReaderIOResult,
25+
ReaderIOResultE as ReaderIOResultE,
2226
)

returns/context/requires_context_io_result.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -981,3 +981,9 @@ def ask(cls) -> RequiresContextIOResult[_EnvType, _EnvType, Any]:
981981
RequiresContextIOResultE = RequiresContextIOResult[
982982
_EnvType, _ValueType, Exception,
983983
]
984+
985+
#: Alias to save you some typing. Uses original name from Haskell.
986+
ReaderIOResult = RequiresContextIOResult[_EnvType, _ValueType, _ErrorType]
987+
988+
#: Alias to save you some typing. Uses ``Exception`` as error type.
989+
ReaderIOResultE = RequiresContextIOResult[_EnvType, _ValueType, Exception]

returns/context/requires_context_result.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,3 +714,9 @@ def ask(cls) -> RequiresContextResult[_EnvType, _EnvType, Any]:
714714
RequiresContextResultE = RequiresContextResult[
715715
_EnvType, _ValueType, Exception,
716716
]
717+
718+
#: Alias to save you some typing. Uses original name from Haskell.
719+
ReaderResult = RequiresContextResult[_EnvType, _ValueType, _ErrorType]
720+
721+
#: Alias to save you some typing. Has ``Exception`` as error type.
722+
ReaderResultE = RequiresContextResult[_EnvType, _ValueType, Exception]

tests/test_context/test_requires_context_io_result/test_requires_context_io_result_cast.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# -*- coding: utf-8 -*-
22

3-
from returns.context import RequiresContextIOResult, RequiresContextIOResultE
3+
from returns.context import (
4+
ReaderIOResult,
5+
ReaderIOResultE,
6+
RequiresContextIOResult,
7+
RequiresContextIOResultE,
8+
)
49

510

611
def _function(arg: int) -> RequiresContextIOResultE[int, float]:
@@ -12,6 +17,19 @@ def _function(arg: int) -> RequiresContextIOResultE[int, float]:
1217

1318

1419
def test_requires_context_io_resulte():
15-
"""Ensures that RequiresContextResultE correctly typecast."""
20+
"""Ensures that RequiresContextIOResultE correctly typecast."""
1621
container: RequiresContextIOResult[int, float, Exception] = _function(1)
1722
assert container(0) == RequiresContextIOResult.from_success(10.0)(0)
23+
24+
25+
def test_requires_context_io_aliases():
26+
"""Ensures that ReaderIOResult correctly typecast."""
27+
container: ReaderIOResultE[int, float] = _function(1)
28+
container2: ReaderIOResult[int, float, Exception] = _function(1)
29+
container3: ReaderIOResultE[int, float] = ReaderIOResultE.from_success(
30+
10.0,
31+
)
32+
container4: ReaderIOResultE[int, float] = ReaderIOResult.from_success(10.0)
33+
34+
assert container(0) == container2(0) == container3(0) == container4(0)
35+
assert container(0) == RequiresContextIOResult.from_success(10.0)(0)

tests/test_context/test_requires_context_result/test_requires_context_result_cast.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# -*- coding: utf-8 -*-
22

3-
from returns.context import RequiresContextResult, RequiresContextResultE
3+
from returns.context import (
4+
ReaderResult,
5+
ReaderResultE,
6+
RequiresContextResult,
7+
RequiresContextResultE,
8+
)
49

510

611
def _function(arg: int) -> RequiresContextResultE[int, float]:
@@ -15,3 +20,16 @@ def test_requires_context_resulte():
1520
"""Ensures that RequiresContextResultE correctly typecast."""
1621
container: RequiresContextResult[int, float, Exception] = _function(1)
1722
assert container(0) == RequiresContextResult.from_success(10.0)(0)
23+
24+
25+
def test_requires_context_aliases():
26+
"""Ensures that ReaderResult correctly typecast."""
27+
container: ReaderResultE[int, float] = _function(1)
28+
container2: ReaderResult[int, float, Exception] = _function(1)
29+
container3: ReaderResultE[int, float] = ReaderResultE.from_success(
30+
10.0,
31+
)
32+
container4: ReaderResultE[int, float] = ReaderResult.from_success(10.0)
33+
34+
assert container(0) == container2(0) == container3(0) == container4(0)
35+
assert container(0) == RequiresContextResult.from_success(10.0)(0)

0 commit comments

Comments
 (0)