首页
学习
活动
专区
圈层
工具
发布

理解Monad
EN

Stack Overflow用户
提问于 2019-11-10 11:20:45
回答 1查看 198关注 0票数 1

问题

请帮助确认或纠正对Monad及其特性的理解。

As数据类型

据我理解,Monad是:

  1. 可容纳任何类型T和
  2. 提供绑定接口,该接口允许客户端应用平面映射函数和
  3. 将其内容投影到任意类型的Monad中。

需要有一个返回单元接口来创建T类型的Monad。

代码语言:javascript
复制
unit:= T -> M[T]

在Scala中,List()或Set()是返回接口的例子,任何Scala序列类型(数组、列表、地图、字符串)都是Monad,它们提供了flatMap接口,即绑定

这些是对的吗?

As设计模式

软件工程提供了管理复杂性或构建软件的方法,如无goto的结构化编程、UNIX管道到流水线转换、面向对象封装数据和控制访问等。

Monad是一种设计模式,它提供了一种将计算构造为链的方法吗?

在其他系统中

UNIX命令

我认为UNIX命令--例如cat、grep --是可以链接的函数,但并不意味着它们是Monad,也不是Monad,因为它们没有返回/单元,也不是数据类型。还是仍然被认为是IO Monad,如在Monadic i/o与UNIX编程

Python

我相信在Python中没有、bind、或Scala flatMap等效的东西。我可以说Python不具备Monad功能吗?

参考文献

EN

回答 1

Stack Overflow用户

发布于 2019-12-30 12:23:47

  1. 是的,你说的那些界面是对的。但值得注意的是,在抽象过程中,单块应该有两种可以组成的附加方法来连接计算。请注意,flatMap只是这些方法的组合--平面和映射。map可用于定义MA、->、M[MB]和平面类型的计算,后者用于定义M[MB] -> MB。
  2. 是的,在Scala中,它们是链式计算的一种方法。
  3. shell脚本命令可能满足monad的目的(在考虑过的类比中),但仍然不能被视为monad(至少在我看来),因为它们不一定符合第1点。
  4. 是的,Python中的monads是不支持的。必须只依赖嵌套循环。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58788146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档