And unintrusive functional offering of tools
Project description
UFO 🛸
uniform functional orchestrators
Delicious monads and functional programming patterns in python!
Check out the api docs for reference
Project Goals
This library is meant to implement a simple tools for functional programming in python in a way that:
- Can be intergrated quickly/simply with existing code
- Maintains type safety
- Depends only on the standard library
Quick Start
Install libary with pip:
pip install monadcontainers
You can now import monad classes for handling functional chains over data.
Say we want to pass a value through a list of functions like so:
def add_six(x: int) -> int:
return x + 6
def minus_two(x: int) -> int:
return x - 2
x = minus_two(add_six(4)) # x == 8
This can be a little messy with long calls, more importantly monads can handle repeated work for us with each call (but we'll cover that in a sec).
A basic identity Monad implementing the above looks like this:
from monadcontainers.monads import Monad
x = (
Monad(4)
.bind(add_six)
.bind(minus_two)
) # x == Monad(8)
y = x.value # y == 8
This above pattern chains the Monad contained value through the relevant functions. For alternative syntactical sugar to the bind method, you can use >>:
x = (
Monad(4)
>> add_six
>> minus_two
) # x == Monad(8)
We can also use Monads to handle additional functionality for us, like error handling with the Result monad:
def divide_by_zero(x: int) -> int:
return x / 0
x = (
Result(4)
>> add_six
>> divide_by_zero
>> minus_two
) # x is a result monad
x.unwrap() # <- raises divide by zero exception
x.unwrap_or(42) # <- evaluates to 42
x.value # <- is None (since exception has been raised)
x.exception # <- is a ZeroDivisionError
x.recover(add_six) # <- will apply the given function to the last non-error state
Monad's can be a helpful pattern for functional programming, see the docs for more info on available Monad classes.
Enjoy! 👍
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ufo_tools-0.3.0.tar.gz.
File metadata
- Download URL: ufo_tools-0.3.0.tar.gz
- Upload date:
- Size: 55.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61289051ba8da6f7b8968cbb5490f13e9439623d51fb29528251f89f66b36b58
|
|
| MD5 |
874e817c7b2bb4848032c0e28bc55419
|
|
| BLAKE2b-256 |
6c4e8b01afa40ee83f4ac15b65e5865db0028c03d1d2d6d14b0d76d4abb67735
|
File details
Details for the file ufo_tools-0.3.0-py3-none-any.whl.
File metadata
- Download URL: ufo_tools-0.3.0-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43a8163aa89c60f7a63d47121e9f813db66d8f1264f766c5944850b117aa5d89
|
|
| MD5 |
b557b99cc9310989f92d85c68caa803c
|
|
| BLAKE2b-256 |
456c8a2c0d6d7de902b999cff127278a289242fadbd6ae4d9649026c89b10f7e
|