Ich lerne Haskells Bewerber. Es scheint mir (ich liege wahrscheinlich falsch), dass diepure
Funktion nicht wirklich benötigt wird, zum Beispiel:
pure (+) <*> [1,2,3] <*> [3,4,5]
kann geschrieben werden als
(+) <$> [1,2,3] <*> [3,4,5]
Kann jemand den Nutzen erklären, den die pure
Funktion gegenüber der expliziten Zuordnung bietet fmap
?
pure
ermöglicht es einem, "reine" Werte in einer anwendbaren Berechnung zu verwenden. Während, wie Sie richtig beobachten, pure f <*> x
dasselbe ist wie f <$> x
, gibt es kein solches Äquivalent für beispielsweise f <*> x <*> pure y <*> z
. (Zumindest glaube ich nicht.)
Monoid
Klasse verknüpft -, die pure
dem Monoid
Identitätselement entspricht. (Dies deutet darauf hin, dass Applicative
ohne pure
interessant sein könnte, da Semigroup
- was ein ist, Monoid
ohne unbedingt eine Identität zu haben - immer noch verwendet wird. Eigentlich denke ich jetzt daran, dass PureScript genau eine solche pure
Klasse "Applikativ ohne " hat, obwohl ich es nicht tue Ich weiß nicht, wofür es verwendet wird.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z
, denke ich. Die Idee ist in der Applicative
Dokumentation als Gesetz des "Austauschs".
pure f <*> x
ist genau das gleiche wiefmap f x
. Ich bin mir sicher, dass es einen Grund gibt, warum diespure
aufgenommen wurdeApplicative
, aber ich bin mir nicht ganz sicher, warum.