为什么pointfree.io选择liftM2而不是liftA2?

时间:2018-03-29 20:43:03

标签: haskell monads functor applicative

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

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

我回来了:

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

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

1 个答案:

答案 0 :(得分:6)

事实是Control.MonadControl.Applicative年长。

Monads已经在Haskell 98中,而关于applicative functors的论文是在2007年推出的.Hackage中的软件包自2005年开始存在。

Wikipedia

  

由于历史意外,应用仿函数并未实现为Monad的超类,而是作为单独的类型实现。事实证明,在实践中,对这种分离的要求非常少,因此在2014年,有人建议将Applicative追溯为Monad的超类。

所以liftM{N}仍然有效。