J'apprends les candidats de Haskell. Il me semble (je me trompe probablement) que la purefonction 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 purefonction par rapport à un mappage explicite fmap?
purepermet d'utiliser, bien, des valeurs "pures" dans un calcul Applicatif. Alors que, comme vous le constatez correctement, pure f <*> xc'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.)
Monoidclasse importante - dans laquelle purecorrespond l' Monoidélément identitaire de. (Cela suggère que Applicativesans purepourrait être intéressant, car Semigroup- ce qui est Monoidsans nécessairement avoir une identité - est toujours utilisé. En fait, maintenant j'y pense, il me semble que PureScript a exactement une telle pureclasse "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 Applicativedocumentation comme la loi de "l'échange".
pure f <*> xc'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.