【发布时间】:2016-04-09 14:55:29
【问题描述】:
我正在尝试完成以下任务:
jsonStr = "{\"a\": \"hello\",
\"b\": [\"world\", \"everyone\", \"42\"]}"
someALens = ...
someBLens = ...
combinedJson = jsonStr ... someALens ... someBLens
得到结果:
combinedJson == ["hello world", "hello everyone", "hello 42"]
但是,我一直在寻找的组合运算符(如<>~)似乎需要一个设定值来映射(或以其他方式组合)镜头。如何创建可以组合多个镜头的值的复合镜头?
【问题讨论】:
-
我认为stackoverflow.com/questions/17552835/… 是您正在寻找的。一旦你定义了上面描述的 Monoid 实例,你就可以写
combinedJson = jsonStr ^.. (someALens <> someBLens)。 -
@haoformayor 在最近的
lens版本中包含这个monoid实例。只需让^.. (someALens <> someBLens)成为答案。 -
这正是我所需要的。谢谢!一旦有人将其作为答案,我将其标记为正确。
标签: json haskell haskell-lens aeson