关于 json:Haskell – 合并来自不同镜头的结果

Haskell - Combine results from separate lenses

我正在尝试完成以下任务:

1
2
3
4
5
jsonStr ="{"a": "hello",
            "
b": ["world", "everyone", "42"]}"
someALens = ...
someBLens = ...
combinedJson = jsonStr ... someALens ... someBLens

得到结果:

1
combinedJson == ["hello world","hello everyone","hello 42"]

然而,我一直在寻找的组合运算符(如 <>~)似乎需要一个设定值来映射(或以其他方式组合)镜头。如何创建可以组合多个镜头的值的复合镜头?


正如评论中所讨论的,答案是相当虎头蛇尾的jsonStr ^.. (someALens <> someBLens)。两个吸气剂映射成一个折叠。 Monoids,我们永远的朋友。