你们如何理解 Monad?

2011-09-26 14:06:08 +08:00
 n2n3
http://en.wikipedia.org/wiki/Monad_(functional_programming)
8636 次点击
所在节点    数学
3 条回复
dreamersdw
2011-10-21 03:42:55 +08:00
Monad 是一种设计模式,如果遇到问题 X 请使用方法 Y

如果返回值有可能为空,使用 Maybe Monad
如果返值可能有零个也可能有多个,使用 List Monad
如果要读取全局信息, 使用 Reader Monad
如果要在执行过程中记录些什么,使用 Writer Monad
如果想读取又修改某些东西,使用 State Monad
......

我们完全可以弃这些 Monad 不用,而手工处理各种情况,只是那样的话,代码会变得冗长繁琐。

即使是 IO 操作也不必非得依赖 Monad。源自 Haskell 的 clean 语言使用 uniqueness typing system 技术实现 IO
cloud_dai
2011-11-08 20:00:11 +08:00
任何的模式都是为解决一类问题,Monad也是。 就是computational context,
先理解value, type, typeclass 及一点闭包的概念。

然后从Functor-> Applicative Functor -> Monad去理解学习。
具体类容多。
这个探索的路径。

我会写个这个方面的总结blog(现在连blog都没有)的。
wshcdr
2019-05-24 16:18:36 +08:00
抛开那些理论,你可以把 monad 理解成是一个 Context
看下这个例子
Just 2 >>= (\x -> Just(x + 1))
帮助你理解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/18629

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX