Ich habe versucht, ein Haskell-Beispiel, zu dem ich früher gekommen bin, in scalaz umzuwandeln. Das ursprüngliche Beispiel war dies:
%Vor%Was ich soweit verstehen kann, verwendet diese Instanz.
Es wird nicht wörtlich in scalaz konvertiert:
%Vor%Obwohl ich nach einer Instanz gesucht habe und es scheint sei da (soweit ich das verstehen kann).
Die Frage ist also: Warum funktioniert das nicht so? Oder was habe ich vermisst / nicht richtig verstanden?
Scalaz's Äquivalent von Control.Applicative
s <*>
wird auch <*>
genannt, obwohl es seine Argumente in umgekehrter Reihenfolge verwendet. So funktioniert das folgende:
Oder, wie ich als Antwort auf Ihren Kommentar bemerkt habe, könnten Sie Folgendes verwenden, wenn Sie bei |@|
bleiben möchten:
Ich persönlich bevorzuge die <*>
Version, auch wenn es sich rückwärts anfühlt.
Wir können etwas detaillierter durchgehen. Zuallererst brauchst du nicht die volle Leistung von Applicative
hier - Apply
reicht aus. Wir können die Apply
Instanz für Tupel mit implicitly
erhalten:
Jetzt können wir unser erstes Tupel auf das zweite anwenden:
%Vor%Und das Ergebnis zum dritten:
%Vor%Was wir wollen:
%Vor% Die <*>
-Methode für MA
schließt das einfach etwas besser ein.
Tags und Links scala monoids applicative scalaz