我刚刚从typeclassopedia读了Monad和Applicative之间的区别。 我可以理解,没有join Applicative 。 但是下面的描述对我来说看起来含糊不清,而我无法弄清楚单子计算/行为的“结果”到底是什么意思。 所以,如果我把一个值写入Maybe ,这会产生一个monad,这个“计算”的结果是什么? 让我们仔细看看(>> =)的types。 基本的直觉是它将两个计算结合到一个更大的计算中。 第一个参数ma是第一个计算。 然而,如果第二个论点只是一个mb,那将是无聊的; 那么计算就不可能互相交互(实际上,这正是Applicative的情况)。 因此,(>> =)的第二个参数具有typesa – > mb:这种types的函数在给定第一个计算结果的情况下可以产生第二个要运行的计算。 …直观地说,正是这种能力使用以前的计算输出来决定接下来运行哪些计算,使得Monad比Applicative更强大。 应用计算的结构是固定的,而Monad计算的结构可以基于中间结果而改变。 是否有一个具体的例子说明“能够使用先前计算的输出来决定接下来要运行什么计算”,Applicative没有?