Wie behandle ich Getter mit der Haskell-Objektivbibliothek als "First Class"?

8

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?

    
prophet-on-that 16.10.2014, 10:29
quelle

2 Antworten

2

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:

%Vor%

Mit diesem Wissen können Sie die Applicative -Instanz für (->) verwenden, wie J. Abrahamson gezeigt hat, um die gewünschte Funktion zu erstellen:

%Vor%     
Reite 16.10.2014, 12:25
quelle
3

Sie können immer die Applicative -Instanz für (->)

verwenden %Vor%

oder, etwas weniger allgemein, kann Ihnen die Monoid -Instanz für Getter s

helfen %Vor%     
J. Abrahamson 16.10.2014 11:37
quelle

Tags und Links