为什么州立Monad需要平面地图?

时间:2019-09-17 12:42:58

标签: functional-programming state-monad

很抱歉,这个问题很幼稚。

我知道状态单子的本质是S =>(S,A)类型的映射,其中S是状态类型,A是计算结果类型。然后将状态monad的本质定义为(在Scala中)

class StateMonad[S,A](transition: S => (S,A))

那应该是全部,没什么大不了的。为什么这么多书也将flatMap放在州单子的定义中?除了诸如“否则,玩弄国家会容易出错”这样的论点,动机是什么?据我所知,flatMap主要适用于列表或集合。所以,我真的很想念这里的大图片。有人可以澄清吗?谢谢。

我希望看到一个不需要有关单子的知识的答案。实际上,在真正引入单子概念之前,我正在阅读教科书中的“国家单子”一章。我开始使用的语言是Scala。

1 个答案:

答案 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