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第三方库


热门话题
Java在二维数组中获取所有值的组合   java如何在Heroku上运行Flyway迁移?   当Tomcat作为windows服务启动时,其他计算机无法使用java Tomcat应用程序   java SPNEGO获取用户详细信息   java多线程SaxParser解析多个xml文件   如何将十六进制字符串转换为字节。JAVA   java Android:如何在MapBox中添加自定义标记?   java如何从Android广播UDP数据包?   java驱动程序。executeScript()返回简单javascript的NullPointerException   java我们如何在网站上从系统上传文件?   java在JTextArea中剪切和粘贴   java PrimeFacesRequestContext。getCurrentInstance()。为SelectOne菜单重置   java在安卓中动态存储运行时变量   java如何检测“文本内容中发现无效字符”   Java数据结构:错误“无法访问LinkedList”   java合并排序(根据频率排序单词)   java为什么/如何将整数设置为1使while循环工作?   java Maven编译器插件抱怨“未找到SLF4J提供程序”   jakarta ee java锁定文件   java Hibernate会话。update()与update查询?