Ich versuche, so etwas wie das zu erreichen, folgende:Haskell - Kombinieren Sie Ergebnisse aus einzelnen Linsen
jsonStr = "{\"a\": \"hello\",
\"b\": [\"world\", \"everyone\", \"42\"]}"
someALens = ...
someBLens = ...
combinedJson = jsonStr ... someALens ... someBLens
als Ergebnis zu erhalten:
combinedJson == ["hello world", "hello everyone", "hello 42"]
Allerdings habe ich die Kombination Betreiber gewesen bin Das Finden (wie <>~
) scheint einen gesetzten Wert zu erfordern, um über eine Linse zu mappen (oder anderweitig zu kombinieren). Wie könnte ich eine zusammengesetzte Linse erstellen, die Werte von mehreren Linsen kombinieren kann?
Ich denke, http://stackoverflow.com/questions/17552835/combining-getters-into-a-fold ist was du suchst. Sobald Sie die Monoid-Instanz wie oben beschrieben definiert haben, können Sie 'combinedJson = jsonStr^.. (someALens <> someBLLens)' schreiben. – hao
@haoformayoder diese Monoid-Instanz ist in neueren 'Linsen'-Versionen enthalten. Machen Sie einfach '^ .. (someALens <> someBLLens)' eine Antwort. – leftaroundabout
Das war was ich brauchte. Vielen Dank! Sobald jemand es als Antwort ausgibt, werde ich es als korrekt markieren. –