monadcontainers API documentation

# monadcontainers

Simple monad containers for functional chaining

# Monad Containers

Delicious monads for functional programming patterns in python!

## Project Goals

This library is meant to be a simple class for functional chaining 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

Monad's can be a helpful pattern for functional programming, see the docs for more info on available Monad classes.

Enjoy! 👍

View Source

    1"""
    2Simple monad containers for functional chaining
    3
    4.. include:: ../README.md
    5"""