python 3.7的带类型注释的monad实现+

typesafe-monads的Python项目详细描述


键入安全单子

Build StatuscodecovCode style: black

这是一个在Python中构建monad的实验,由strict支持 键入批注目标是能够与 类型检查器确保其正确性。

动机

我是monads的粉丝,但相信他们在 强类型系统。我尝试过使用类似 PyMonad,但是被 缺少防止错误使用的类型约束。我本来可以 试图向其中一个库添加类型批注,但是 建立自己的更有趣。

基类

函子

地图(*

将函数应用于函子的内容,将其从 一件事对另一件事。

*运算符在函子上实现映射,并且是左和 右关联:

defwordcount(s:str):returnlen(s.split())f.map(wordcount)==wordcount*f==f*wordcount

应用

扩展了Functor

在应用函子中包装值

例如:

Maybe.pure("abc") == Just("abc")
Result.pure(123) == Ok(123)

应用(&

将实例函子中包含的值转换为 函数包装在同一类型的函子中。

&运算符实现应用于应用程序,并且 右联想

例如:

increment=lambdax:x+1Just(3).apply(Just(increment))==Just(increment)&Just(3)==Just(4)

这可以很容易地与map结合起来应用当前的函数 多个参数:

subtract=lambdax:lambday:x-ysubtract*Just(10)&Just(4)==Just(6)

单子

扩展Applicative

绑定(>>

通过返回 同一类型的monad,允许链接多个操作

>>运算符在单子上实现绑定,并且是左关联的

@currydeflookup(key:str,dictionary:Dict[str,str])->Maybe[str]:try:returnJust(dictionary[key])exceptKeyError:returnNothing()result=Just({"hello":"world"}).bind(lookup("hello")).bind(lambdas:s.upper())result=(Just({"hello":"world"})>>lookup("hello")>>(lambdas:s.upper()))

幺半群

映射挂起(+

描述类型的关联二进制操作。

mzero

mappend操作提供标识值。

mconcat

使用mappend累积值列表。返回mzero 值(如果列表为空)。

单子

可能[t]

表示可选数据特定类型的Maybe实例T将 可以是包装该类型值的Just对象,也可以是Nothing

  • Nothing上映射函数将返回Nothing,而不返回 调用函数
  • Nothing绑定操作将返回Nothing,而不 正在尝试操作。

结果[t,e]

表示成功或失败的状态,为每个状态声明一个类型。一个 Result实例将是包装值为的Ok对象 成功类型T,或Err对象包装 失败类型E

  • Err上映射函数将返回Err不变 不调用函数。
  • Err绑定操作将返回Err未更改 不尝试操作。

列表[t]

表示项的序列。

  • 还实现Monoid

未来[t]

表示异步操作

  • 还实现Awaitable

读卡器[T]

表示函数对其参数的应用。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有嵌套JAR的java RCP ClassNotFoundException   java在输入框中设置默认值,crud应用程序使用spring   java如何在Heroku中使用fs创建新文件   java将JPanel放在JFrame中   java这个正则表达式会匹配“i.imgur.com/xxx”吗?   java在片段内创建RecylerView,而无需在Android中设置片段   Android上Groovy导致java错误的双精度浮点精度损失   swing Java查找JFrame属于JPanel的内容   java Spring junit自连线自定义类本身必须有构造函数吗?   java textswitcher支持前面的文本   从Android客户端到JAXRS的java Post自定义对象   java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进   拒绝用户“root”@“localhost”的java c3p0访问(使用密码“是”)   使用Selenium Webdriver自动化ExtJS应用程序时java面临的问题