Ich möchte eine Traversierung filtern und dann das letzte Element auswählen, das mit over
verwendet werden soll.
z.B. etwas wie das (aber was wird eigentlich kompilieren):
%Vor%Irgendwelche Ideen?
P.S. Mir ist bewusst, dass filtered
nur gültig ist, wenn die Anzahl der Elemente in der Traversierung nicht beeinflusst wird.
Der tatsächliche Anwendungsfall, den ich ausführe, besteht darin, nur die niedrigste Ebene eines rekursiven uniplate
Traversals auszuwählen, das mit einem Prädikat übereinstimmt; Wenn du andere Ideen hast, wie das geht, würde ich sie gerne hören!
Dies ist nicht wirklich eine Antwort, nur eine Nachfolge von @Gurkenglas, die für einen Kommentar zu groß ist. Beachten Sie, dass @ Gurkenglas die Antwort:
%Vor%kann wie ein Traversal aussehen , aber es ist nicht so, selbst wenn Sie die Elementanzahl beibehalten, weil es (aus offensichtlichen Gründen) gegen das zweite Traversalgesetz verstößt:
%Vor%Damit es sich um eine Traversierung handelt, müssen Sie beide die Elementanzahl und die Filtereigenschaft als Invarianten beibehalten.
Ob das für Ihre Anwendung wichtig ist, weiß ich nicht, aber seien Sie sich bewusst, dass partsOf
mit solchen Vorbehalten behaftet ist, und die Dokumentation deutet irreführend darauf hin, dass das Ergebnis von partsOf
ein Lens sein wird Pflegen Sie die Elementanzahl. (Das gilt für partsOf each
, das Beispiel in der Dokumentation, aber nicht allgemein.)