请帮助确认或纠正对Monad及其特征的理解。
据我所知,一个Monad是:
需要有一个返回或单位界面来创建T型Monad。
unit:= T -> M[T]
在Scala中,List()或Set()是 return 接口的示例,任何Scala序列类型(数组,列表,映射,字符串)都是Monad,它们提供 flatMap < / strong>界面,该界面绑定。
这些对吗?
软件工程提供了管理复杂性或构建软件的方法,例如无goto的结构化编程,UNIX管道到管道的转换,面向对象的数据和控件访问封装等。
Monad是一种设计模式,提供了一种将计算结构化为链条的方法吗?
我猜想UNIX命令,例如cat,grep是可以链接的函数,但这并不意味着它们是Monad,它们不是Monad,因为它们没有 return / unit 或它们不是数据类型。还是仍然被认为是IO Monad是Monadic i/o and UNIX shell programming中的人吗?
我相信Python中没有现成的 bind 或Scala flatMap。我可以说Python没有开箱即用的Monad功能吗?
答案 0 :(得分:0)
是的,您对这些界面方面的看法是正确的。但是,值得注意的是,在抽象上,单子应具有两种辅助方法,可以将它们组合起来以链接计算。请注意,flatMap只是这些方法的组成部分-flat和map。映射可用于定义类型为M [A]-> M [M [B]]的计算,而平面则用于定义M [M [B]]-> M [B]。
是的,在Scala中,它们是链接计算的一种方式。
shell脚本命令可以实现monad的目的(在所考虑的类比中),但仍然不能被视为monad(至少对我来说是这样),因为它们不一定符合第1点。 / p>
是的,Python不支持开箱即用的monad。一个人必须仅依赖嵌套循环。