在应用中需要纯正

问题描述 投票:1回答:1

我正在学习Haskell的Applicatives。在我看来(我可能错了),实际上并不需要纯函数,例如:

pure (+) <*> [1,2,3] <*> [3,4,5]

可以写成

(+) <$> [1,2,3] <*> [3,4,5]

有人能解释纯函数提供的优于使用fmap的显式映射的好处吗?

haskell applicative
1个回答
0
投票

fmap并不总是将其剪切。具体来说,pure是让您在没有f的情况下(其中fApplicative)的方法。一个很好的例子是

sequence :: Applicative f => [f a] -> f [a]

[它包含产生值的“动作”列表,并将其转变为产生值列表的动作。如果列表中没有动作,会发生什么?唯一合理的结果是不产生​​任何值的动作:

sequence [] = pure [] -- no way to express this with an fmap
-- for completeness
sequence ((:) x xs) = (:) <$> x <*> sequence xs

如果没有pure,将被迫要求提供非空的动作列表。您绝对可以使它起作用,但这就像在不使用0的情况下进行算术运算(这不是巧合!)。您将反复遇到用pure可以轻松解决的极端情况,但必须通过对输入和其他创可贴的怪异限制来解决。

© www.soinside.com 2019 - 2024. All rights reserved.