很抱歉,这个问题很幼稚。
我知道状态单子的本质是S =>(S,A)类型的映射,其中S是状态类型,A是计算结果类型。然后将状态monad的本质定义为(在Scala中)
class StateMonad[S,A](transition: S => (S,A))
那应该是全部,没什么大不了的。为什么这么多书也将flatMap
放在州单子的定义中?除了诸如“否则,玩弄国家会容易出错”这样的论点,动机是什么?据我所知,flatMap
主要适用于列表或集合。所以,我真的很想念这里的大图片。有人可以澄清吗?谢谢。
我希望看到一个不需要有关单子的知识的答案。实际上,在真正引入单子概念之前,我正在阅读教科书中的“国家单子”一章。我开始使用的语言是Scala。
答案 0 :(得分:3)
flatMap
函数可带来使用Monad
所获得的额外功能,而不是像Functor
和{{1 }}。对于Applicative
,此函数的类型为:
State
在函数def flatMap[S, A, B](f: A => State[S, B], state: State[S, A]): State[S, B]
中,您可以检查以前的有状态计算的结果,并用它来决定如何继续进行其余的计算,例如
f