🥫 Cans¶

https://img.shields.io/pypi/v/cans.svg?style=flat-square https://img.shields.io/pypi/l/cans.svg?style=flat-square https://img.shields.io/pypi/pyversions/cans.svg?style=flat-square https://img.shields.io/readthedocs/cans.svg?style=flat-square https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square

Simple, functional, composable containers like Maybe. Properly typed and supports pattern matching on Python 3.10+. Inspired by the containers in the Rust standard library.

Quickstart¶

>>> from cans import Just, Nothing, Maybe
>>> greeting: Maybe[str] = Just("Hello")
...
>>> def first(m: list[str]) -> Maybe[str]:
...     return Just(m[0]) if m else Nothing()
...
>>> first(["howdy", "hi", "hello"]).map(str.title).unwrap()
"Howdy"
...
>>> # Python 3.10+ only
>>> match greeting:
...     case Just(n):
...         print(f"{greeting} world!")
...     case Nothing():
...         print("Hi world!")
Hello world!

Among the supported methods are flatmap, filter, zip, as well as the relevant collection APIs. See the documentation for a complete overview.

Todo¶

  • Other containers

Contents¶

Changelog¶

0.1.3 (2021-04-17)¶

  • Python 3.6 support

0.1.2 (2021-04-06)¶

  • Small fixes to docs

  • Fix typing according to PEP561

0.1.1 (2021-04-05)¶

  • Fix bug where docs dependencies were included in base release.

0.1.0 (2021-04-05)¶

  • Improve documentation, typing of Maybe.

0.0.2 (2021-04-05)¶

  • First implementation of Maybe.

Indices and tables¶