Ändern Sie das Element der Liste, wenn es gegen eine Bedingung gilt, oder fügen Sie ein neues hinzu, falls nicht, indem Sie Data.Lens verwenden

8

Ich habe eine Liste von Datensätzen und benötige eine Funktion, die die Liste nach einem Datensatz mit einem bestimmten Namen durchsucht und den Wert dieses Datensatzes ändert OR wenn kein Datensatz einen neuen Datensatz an den resultierenden anfügt Liste. Hier ist mein Code so weit:

%Vor%

Es funktioniert gut, aber ich frage mich, ob es eine direktere Möglichkeit gibt, dies mit Data.Lens (ohne if -construct) zu schreiben? Muss ich auch die Funktion _find schreiben oder gibt es in der Bibliothek etwas Entsprechendes?

Update : Hier ist ein Gist der Quelle zum Experimentieren: Ссылка

>     
Sven Koschnicke 13.06.2013, 12:57
quelle

3 Antworten

2

Wie wäre es mit:

%Vor%     
yairchu 16.06.2013, 00:23
quelle
2

Ich weiß es nicht, aber Sie können etwas wie

schreiben %Vor%     
josejuan 13.06.2013 13:45
quelle
2

Also, _find ist eigentlich kein Traversal :

%Vor%

Das ist der gleiche Sinn filtered ist keine Traversierung.

Das Teilen kann mit filtered imitiert werden (hier ist es in Ordnung, seit Fold hat keine Gesetze):

%Vor%

Nun, angenommen "direkterer Weg" ist ein cleveres Traversal : nein, das ist nicht möglich, Traversal s kann die Struktur des durchlaufenen Objekts nicht verändern.

    
Matvey Aksenov 14.06.2013 11:38
quelle

Tags und Links