【发布时间】:2019-09-17 12:42:58
【问题描述】:
对不起,这个非常幼稚的问题。
我知道状态单子的本质是一个类型 S => (S,A) 的映射,其中 S 是状态的类型,A 是计算结果的类型。那么状态单子的本质将被定义为(在 Scala 中)
class StateMonad[S,A](transition: S => (S,A))
这应该是全部,没什么大不了的。为什么这么多书还将flatMap 放入状态单子的定义中?除了诸如“否则,与状态一起玩会变得容易出错”之类的论点之外,还有什么动机?据我所知,flatMap 主要适用于列表或集合。所以,我真的很想念这里的一些大图。有人可以澄清吗?谢谢你。
我希望看到不需要单子知识的答案。事实上,在真正引入 monad 概念之前,我正在阅读教科书中的 State Monad 章节。我开始学习使用的语言是 Scala。
【问题讨论】:
-
flatMap是所有 monad 的要求。 -
@lee 是的,这是我理解的问题,因为我在实际引入 monad 概念之前正在阅读 State Monad 章节。你能解释一下为什么需要 flatMap 来处理状态或特定的状态单子吗?
-
是的,
flatMap不是必需的吗?有些地方称它为bind,但最终它需要一个函数,该函数返回一个 monad 并用它转换当前的 monad。所以它不仅是 State monad,而且任何 monad 都需要它。没有它,您将无法有效地使用 monad。
标签: functional-programming state-monad