在他的回答这个问题"类型类之间的区别MonadPlus,Alternative以及Monoid?",爱德华Kmett说,
而且,即使
Applicative是超级课程Monad,你最终还是需要MonadPlus上课,因为顺从Run Code Online (Sandbox Code Playgroud)empty <*> m = empty并不足以证明这一点
Run Code Online (Sandbox Code Playgroud)empty >>= f = empty因此声称某事物是一件事,
MonadPlus比宣称事情要强Alternative.
很明显,任何适用函子是不是一个单子是自动的一个例子Alternative是不是MonadPlus,但爱德华Kmett的回答意味着存在一个单子这是一个Alternative,但不是一个MonadPlus:它empty和<|>将满足Alternative法律,1而不是MonadPlus法律.2 我自己无法想出这样的例子; 有人知道吗?
1我无法找到一套规则的规范参考Alternative,但是我将我认为它们的内容大概放在我对" 类型类的含义及其与其他类型的关系的混淆"这一问题的答案的中间.类"(搜索短语"正确的分配").我认为应该遵守的四项法律是:Alternative
<*>: (f …