J'apprends les candidats de Haskell. Il me semble (je me trompe probablement) que la pure
fonction n'est pas vraiment nécessaire, par exemple:
pure (+) <*> [1,2,3] <*> [3,4,5]
peut être écrit comme
(+) <$> [1,2,3] <*> [3,4,5]
Quelqu'un peut-il expliquer les avantages de la pure
fonction par rapport à un mappage explicite fmap
?
pure
permet d'utiliser, bien, des valeurs "pures" dans un calcul Applicatif. Alors que, comme vous le constatez correctement, pure f <*> x
c'est la même chose que f <$> x
, par exemple , il n'y a pas d'équivalent pour f <*> x <*> pure y <*> z
. (Au moins, je ne pense pas.)
Monoid
classe importante - dans laquelle pure
correspond l' Monoid
élément identitaire de. (Cela suggère que Applicative
sans pure
pourrait être intéressant, car Semigroup
- ce qui est Monoid
sans nécessairement avoir une identité - est toujours utilisé. En fait, maintenant j'y pense, il me semble que PureScript a exactement une telle pure
classe "Applicative sans ", bien que je ne sais pas à quoi il sert.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z
, je pense. L'idée est dans la Applicative
documentation comme la loi de "l'échange".
pure f <*> x
c'est exactement la même chose quefmap f x
. Je suis sûr qu'il y a une raison pour laquelle cela apure
été inclusApplicative
, mais je ne sais pas vraiment pourquoi.