一元数据结构
matts-majestic-monads的Python项目详细描述
马特斯雄伟的单子
这个夸张的库在python中实现functor、applicative和monad。
概要
可以使用Either.convert
或Maybe.convert
作为修饰符来转换返回类型。
此示例将异常转换为左值:
frommonadsimportEither@Either.convertdefparse_arguments():parser=argparse.ArgumentParser(description='Download a URL and print it')parser.add_argument('URL',help='URL to download')returnparser.parse_args()
一旦你有了你的二者之一,你就可以使用fmap
和bind
来操作包含的值:
result=(make_parser().fmap(parse).fmap(to_url).bind(read))
将向这些方法传递当前值。
当函数返回正常值时,应该使用fmap
。
当函数返回一个monad时,使用bind
。
可以使用Function
作为修饰符来转换函数。
一旦转换成可组合的:
frommonadsimportFunction@Functiondefparse(parser):returnparser.parse_args()@Functiondefto_url(arguments):returnarguments.URLboth=parse.compose(to_url)
示例
有一个在example.py
中使用这个库的简单示例。
此脚本读取您提供的URL并打印正文的长度:
➜ 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>)