为什么pointfree.io选择LiftM2而不是Lifta2



我最近在练习中为ISBN验证器练习写了一个解决方案,当我通过pointfree.io运行此功能时:

c -> isDigit c || c == 'X'

我回来了:

liftM2 (||) isDigit ('X' ==)

为什么pointfree.io从 Control.Monad选择 liftM2,而不是从 Control.Applicative

选择 liftA2

事实是Control.MonadControl.Applicative大得多。

MONAD已经在Haskell 98中,而有关应用函数的论文是在2007年引入的。

Wikipedia:

由于历史事故,应用程序函子不是作为单独的类型类实施的。事实证明,实际上,对这种分离的需求很少,因此在2014年,有人提议使适用性追溯为单一的超级类。

所以liftM{N}仍然有效。

最新更新