Monadic data structures
Project description
Matts Majestic Monads
This overblown library implements Functor, Applicative and Monad in Python.
Synopsis
You can use Either.convert
or Maybe.convert
as a decorator to convert return types.
This example converts exceptions into Left values:
from monads import Either
@Either.convert
def parse_arguments():
parser = argparse.ArgumentParser(description='Download a URL and print it')
parser.add_argument('URL', help='URL to download')
return parser.parse_args()
Once you have your Either you can use fmap
and bind
to operate over the contained value:
result = (
make_parser()
.fmap(parse)
.fmap(to_url)
.bind(read)
)
The methods will be passed the current value.
You should use fmap
when the function will return a normal value.
When the function returns a monad, use bind
.
You can use Function
as a decorator to convert functions.
Once converted they become composable:
from monads import Function
@Function
def parse(parser):
return parser.parse_args()
@Function
def to_url(arguments):
return arguments.URL
both = parse.compose(to_url)
Example
There is a simple example of using this library in example.py
.
This script reads a url that you provide and prints the length of the body:
➜ pipenv run python example.py 'http://python.org/'
Right(48817)
➜ pipenv run python example.py 'http://pythonasdasd.org/'
Left(<urlopen error [Errno -2] Name or service not known>)
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
Hashes for matts-majestic-monads-0.0.5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53b70bbc93cff7aaef6a6091fa444f6418d9b3716f91ee1908e84b83bffee3ca |
|
MD5 | 94fee0db26f3c7cecd5e8a58e061a994 |
|
BLAKE2b-256 | bda241ac8812596fe2357d3c683792fb9f6f415129d98378ae7573f55ed33c29 |