Eff
Eff is a Python library to work with algebraic effects.
Algbraic effects are all side-effects of a piece of code, like reading a user input, writing a text on the screen, doing network requests, reading a file etc. Eff allows to easily handle such effects making the code cleaner and testing easier.
Features:
- Easy to understand. You don't need to read long scientific papers to understand how to use the library and what it does.
- Easy to integrate. If you decided to add a logger into a function, changes will be minimal, no need to pass the logger down through the whole call stack.
- Fast. The classic approach for handling algebraic effects is using coroutines or exceptions. This library uses global shared state instead which doesn't require to unwrap the whole call stack at runtime.
- Type-safe. Effect handlers container is just a class. Annotate effect handlers type to make their usage type-safe.
Installation
python3 -m pip install --user eff
Usage
from io import StringIO
from typing import Callable
import eff
class Eff(eff.ects):
show: Callable
# Use global effects manager in a function.
def greet(username: str) -> None:
Eff.show(f'Hello, {username}!')
# Provide actual side-effects handlers
# for the project prod entry point.
def main() -> None:
with Eff(show=print):
greet('World')
# Mock side-effects in tests.
def test_greet() -> None:
stream = StringIO()
with Eff(show=stream.write):
greet('World')
stream.seek(0)
assert stream.read() == 'Hello, World!'
if __name__ == '__main__':
main()
Further reading
You don't have to read it but it's a good reading for better understanding of the motivation behind the library.
Metadata
Release files for eff 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| eff-1.0.0.tar.gz | 4.0 kB | Without provenance | Details for eff-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| eff-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for eff-1.0.0-py3-none-any.whl |
Total release size: 8.1 kB
Release files / eff-1.0.0.tar.gz
| Download URL | eff-1.0.0.tar.gz |
|---|---|
| Size | 4.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2d8698c8c3fc056235ddc86e48046f8294a44d8f78d93306ef75c4127b4652f
|
|
BLAKE2b-256 checksum How to use checksums |
1e760d137c6919eedb06d2dc1e5dc69903218eeb2085b6b060ab8f06b265cb4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
DepHell/0.8.3
|
Release files / eff-1.0.0-py3-none-any.whl
| Download URL | eff-1.0.0-py3-none-any.whl |
|---|---|
| Size | 4.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ad5e686eaf58e292c2231a152cde31cf4ee780d4906c1b8a116d5cfbec5cbd94
|
|
BLAKE2b-256 checksum How to use checksums |
a11ace172efccb099e8604c646b77a1ba190adcc33ae48db01f98c4fb7fd2ae9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
DepHell/0.8.3
|
Security for eff 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.