我正在学习Haskell的Applicatives。在我看来(我可能错了),实际上并不需要pure
函数,例如:
pure (+) <*> [1,2,3] <*> [3,4,5]
可以写成
(+) <$> [1,2,3] <*> [3,4,5]
有人可以解释
pure
函数提供的优于fmap
的显式映射的好处吗? 最佳答案
我现在的能力很强,因此不要花太多时间,但发表评论的时间太长了。
在类型类中包括pure
可能有实际原因,但是许多Haskell抽象是从理论基础上派生的,我相信Applicative
也是这种情况。正如文档所述,它是一个强大的松散单曲面仿函数(有关详细信息,请参见https://cstheory.stackexchange.com/q/12412/56098)。我猜想pure
充当身份,就像return
充当Monad
(这是endofunctors类别中的一个monoid)一样。
考虑pure
和liftA2
:
pure :: a -> f a
liftA2 :: (a -> b -> c) -> f a -> f b -> f c
如果稍微斜视一下,您也许可以想象
liftA2
是二进制操作,这也是文档指出的内容:将二进制函数提升为动作。
pure
是相应的标识。关于haskell - 对纯净性的需求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60275047/