选择
我最近在练习中为ISBN验证器练习写了一个解决方案,当我通过pointfree.io运行此功能时:
c -> isDigit c || c == 'X'
我回来了:
liftM2 (||) isDigit ('X' ==)
为什么pointfree.io从 Control.Monad
选择 liftM2
,而不是从 Control.Applicative
?
liftA2
事实是Control.Monad
比Control.Applicative
大得多。
MONAD已经在Haskell 98中,而有关应用函数的论文是在2007年引入的。
Wikipedia:
由于历史事故,应用程序函子不是作为单独的类型类实施的。事实证明,实际上,对这种分离的需求很少,因此在2014年,有人提议使适用性追溯为单一的超级类。
所以liftM{N}
仍然有效。