关于 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”]

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

  • 我认为 stackoverflow.com/questions/17552835/ 是你要找的。一旦你定义了上面描述的 Monoid 实例,你就可以编写 combinedJson = jsonStr ^.. (someALens <> someBLens)。
  • @haoformayor 那个 monoid 实例包含在最近的 lens 版本中。只需让 ^.. (someALens <> someBLens) 成为答案。
  • 这正是我所需要的。谢谢!一旦有人将其作为答案,我将其标记为正确。


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

  • 这怎么虎头蛇尾?我想说它的简单性相当漂亮!
  • 同意——这就是我不断回到 Haskell 的原因之一。


来源:https://www.codenong.com/36518458/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?