Я пытаюсь сделать что-то вроде следующего:Haskell - Объединение результатов из отдельных линз
jsonStr = "{\"a\": \"hello\",
\"b\": [\"world\", \"everyone\", \"42\"]}"
someALens = ...
someBLens = ...
combinedJson = jsonStr ... someALens ... someBLens
, чтобы получить в результате:
combinedJson == ["hello world", "hello everyone", "hello 42"]
Однако комбинированные операторы я был поиск (например, <>~
), по-видимому, требует заданного значения для преобразования (или иного объединения) поверх объектива. Как я могу создать составную линзу, которая может комбинировать значения из нескольких объективов?
Я думаю http://stackoverflow.com/questions/17552835/combining-getters-into-a-fold - это то, что вы ищете. Как только вы определите экземпляр Monoid, как описано выше, вы сможете написать 'объединенныйJson = jsonStr^.. (someALens <> someBLens)'. – hao
@haoformayor, что экземпляр monoid _included_ в более поздних выпусках 'lens'. Просто сделайте '^ .. (someALens <> someBLens)' ответ. – leftaroundabout
Это то, что мне нужно. Благодаря! Как только кто-то ответит, я сделаю это правильно. –