|
|
1
37
实际上,在某种程度上,
所有
的显著特征
与平原
一元“副作用”是具有一些附加性质的结构。 〔1〕 :
这个
因此,对于一元副作用而言,bind操作是“取一个具有相关副作用的值和一个引入新副作用的函数,然后将该函数应用于该值,同时组合每个副作用”。
〔0〕:
除了
〔1〕:
如果将这些属性与
|
|
|
2
26
什么连接 做 我想,到目前为止,其他答案已经充分描述过了。如果你在寻找一种更直观的理解……如果你想知道“join”的意思是什么……那么不幸的是,答案会因所讨论的monad而有所不同,具体取决于m(x)“的意思”和m(m(x))“的意思”。 如果m是单子列表,那么m(m(x))是列表列表,join意味着“展平”。如果m是可能的monad,那么m(m(x))的元素可以是“just(just x)”、“just nothing”或“nothing”,join意味着以逻辑方式将这些结构分别折叠为“just x”、“nothing”和“nothing”(类似于camcann对join的组合副作用的回答)。
对于更复杂的单子,m(m(x))变得非常抽象,决定m(m(x))和连接“mean”变得更加复杂。在每一种情况下,它都有点像单子列表的情况,因为您将两个单子抽象层折叠成一个层,但是含义会有所不同。对于状态单子,camcann结合两个副作用的答案是bang-on:join本质上意味着结合两个连续的状态转换。连续单子是特别令人头疼的,但是数学上的连接实际上是相当整洁的:m(x)对应于x的“双对偶空间”,数学家可能会这样写。
但我离题了。 就我个人而言,我试图抵制将一个单一的类比应用于所有可能的单子类型的冲动;单子的概念太笼统,无法用单一的描述性类比来区分。join的含义将根据您在任何给定时间使用的类比而有所不同。 |
|
|
3
6
从同一页恢复此信息
|
|
|
4
5
从概念上讲,它的作用可以通过查看类型来确定:它展开或扁平外部一元容器/计算,并返回其中生成的一元值。 它实际上是如何做到的,这取决于你正在处理的单子类型。例如,对于列表monad,“join”等同于 concat . |
|
|
5
1
绑定操作映射:
(一个不好的例子是可能的单子,因为
这个问题为我在阅读Miran Lipovaca的《好好学你一个哈斯克尔》中明确指出!第12章,单子法的最后一节。
http://learnyouahaskell.com/a-fistful-of-monads#monad-laws
,关联性。这一要求是:“做
区别在于
在左边,我们
重铸
|