在一个讨论中,我听说Applicative一些解析器的接口以不同的方式实现,比它们的Monad接口更有效.原因在于Applicative,在整个有效计算运行之前,我们事先知道所有"效果".对于monad,效果可能取决于计算过程中的值,因此无法进行此优化.
我想看到一些很好的例子.它可以是一些非常简单的解析器或一些不同的monad,这并不重要.重要的是Applicative这样的monad 的接口符合它的return和ap,但使用Applicative产生更高效的代码.
更新:只是为了澄清,在这里我对不能成为monad的应用程序不感兴趣.问题是关于两者的事情.
在吉姆·杜伊(Jim Duey)在幻灯片13中的这组幻灯片中 - 他建议所有Monad都是适用的编织者.

在Haskell 7.7编译器输出中 - 我看到以下(另一个例子在这里):
'Parser'是Monad的一个实例,但不是Applicative - 根据Applicative-Monad提案,这将成为GHC 7.10中的错误.
这是否意味着Haskell编译器目前容忍Monad不是应用程序的编写器 - 但计划是纠正这个?