我正在学习Haskell的Applicatives。在我看来(我可能错了),pure
实际上并不需要该功能,例如:
pure (+) <*> [1,2,3] <*> [3,4,5]
可以写成
(+) <$> [1,2,3] <*> [3,4,5]
有人可以解释该pure
函数提供的显式映射所带来的好处fmap
吗?
我没有时间来回答这个问题,也不相信这无论如何都会是一个好的或完整的回答,但是有一个观察结果:
—
Robin Zigmond
pure
允许一个人在应用计算中使用“纯”值。虽然,当你正确地观察,pure f <*> x
是一样的f <$> x
,不存在这样的等价条件,比方说f <*> x <*> pure y <*> z
。(至少我不这么认为。)
@RobinZigmond
—
HTNW
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z
,我想。该想法在Applicative
文档中被称为“交换”定律。
pure f <*> x
与完全相同fmap f x
。我相信,有一些理由pure
被列入Applicative
,但我不完全知道为什么。