Monad比应用更强大

时间:2015-09-17 01:38:29

标签: haskell

Apple docs的第5.3章注释:

  

直观地说,正是这种能力使用了之前的输出   用于决定接下来运行哪些计算的计算使Monad成为可能   比Applicative更强大。

这个例子向我展示了这种直觉:

ghci> Just 100 >>= (\x -> if (x == 100) then Nothing else Just x) 
Nothing

我不知道(或根据上述说明可能会发生这种情况)如何使用(<*>)来实现相同的上述代码。

是否有其他更精确/更强大的例子在Typeclassopedia中展示了上述文字?

1 个答案:

答案 0 :(得分:4)

不是一个真实的例子,但您正在寻找的确切属性是您无法编写join :: Applicative f => f (f a) -> f a,但如果您将约束更改为Monad,则可以编写它。事实上,如果您只是将此功能添加到应用程序中,它会立即变得像Monad一样强大,因为您可以定义return = purem >>= f = join (fmap f m)

我不记得最重要的是加入法律的地方,但它主要是像join (return (return a)) == return a这样的常识。