Ich habe bemerkt, dass ich im Allgemeinen Funktionen entwickle, die Werte mithilfe von Linsen erhalten, eine Funktion auf die Werte anwenden und das Ergebnis zurückgeben. Zum Beispiel, um die Elemente eines Paares zu summieren
\pair -> (pair ^. _1) + (pair ^. _2)
Ich habe das Gefühl, dass es einen Kombinator geben sollte, um Getter erster Klasse zu kombinieren und einen anderen Getter zurückzugeben (vielleicht vom Typ (b -> c -> d) -> Getter a b -> Getter a c -> Getter a d
). Irgendwelche Hilfe?
Wie oben auf Control.Lens.Getter
, ein Getter a b
ist isomorph zu (a -> b)
. Dies bedeutet, dass sie die gleichen Informationen enthalten und nach Belieben ineinander geändert werden können. Wir können sie ineinander überführen, indem wir Funktionen verwenden, die die Linsenbibliothek bietet:
Mit diesem Wissen können Sie die Applicative
-Instanz für (->)
verwenden, wie J. Abrahamson gezeigt hat, um die gewünschte Funktion zu erstellen:
Sie können immer die Applicative
-Instanz für (->)
oder, etwas weniger allgemein, kann Ihnen die Monoid
-Instanz für Getter
s