所以我有这行代码:monad类型中为什么应该有失败方法?
[Nothing] >>= \(Just x) -> [x]
当然这给了异常,因为模式不匹配没什么。
在另一方面,该代码给出了不同的结果,[]:
do
Just x <- [Nothing]
return x
在我看来,他们应该产生相同的结果,因为做块应该被脱到使用(>> =)并返回。但事实并非如此,使得符号是一个特征而不是语法糖。
我知道单子类型类中存在失败,并且我知道当模式匹配在do-block中失败时会调用它,但我无法理解为什么它是一种想要的行为,应该与使用不同正常的monad操作。
所以我的问题是 - 为什么应该存在失败方法呢?
它仍然是句法糖,糖只比你想象的要甜一点点。 –
如果它真的是一个语法糖,那么它将如何被用于绑定和返回呢? – Brrch
[Haskell报告](https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-470003.14)对此有确切答案。 –