Skip to main content

UFO 🛸

uniform functional orchestrators

Delicious monads and functional programming patterns in python!

Check out the api docs for reference

Coverage Badge Static Badge

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! 👍

Metadata

Release files for ufo-tools 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ufo-tools 0.3.0
File Size Uploaded
ufo_tools-0.3.0.tar.gz 55.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ufo-tools 0.3.0
File Interpreter ABI Platform
ufo_tools-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 62.4 kB

Release files / ufo_tools-0.3.0.tar.gz

Download URL ufo_tools-0.3.0.tar.gz
Size 55.0 kB
Tags Source
SHA-256 checksum
How to use checksums
61289051ba8da6f7b8968cbb5490f13e9439623d51fb29528251f89f66b36b58
BLAKE2b-256 checksum
How to use checksums
6c4e8b01afa40ee83f4ac15b65e5865db0028c03d1d2d6d14b0d76d4abb67735
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.3

Release files / ufo_tools-0.3.0-py3-none-any.whl

Download URL ufo_tools-0.3.0-py3-none-any.whl
Size 7.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
43a8163aa89c60f7a63d47121e9f813db66d8f1264f766c5944850b117aa5d89
BLAKE2b-256 checksum
How to use checksums
456c8a2c0d6d7de902b999cff127278a289242fadbd6ae4d9649026c89b10f7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.3

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page