Data.Lens或Control.Lens

时间:2012-11-08 05:17:11

标签: haskell lenses

  

可能重复:
  lenses, fclabels, data-accessor - which library for structure access and mutation is better

我将在下一个Haskell项目中使用和学习Lens包。当我发现这篇帖子在Data.Lens包中提到van Laarhoven Lenses时,我几乎决定使用Control.Lens包。

我还没有真正了解足够的差异来决定使用哪一个。您建议我在现实世界项目中学习/使用哪个软件包?

感谢。

lenses, fclabels, data-accessor - which library for structure access and mutation is better

3 个答案:

答案 0 :(得分:14)

Control.Lens几乎可以肯定你想要的。 Data.Lens排在第一位,而且更简单,但Control.Lens有许多优点,并且正在积极开发。

除了镜头之外,Control.Lens还有许多相关类型,例如遍历(遍历就像一个镜头,可以指代n值而不是一个),折叠,只读/修改镜头,索引镜头, isomorphisms ...它还带有一个更大的有用函数库和标准库类型的预定义镜头,模板Haskell派生镜头,以及一些代码,用于其他东西,如通用拉链和uniplate样式的泛型遍历。

它是一个很大的图书馆 - 你不必全部使用它,但拥有你想要的东西真是太好了。

Data.Lens的主要优点是它更简单,因此不需要超出Haskell 98的扩展。但请注意,如果您只想导出Control.Lens来自图书馆的镜头,你可以不用离开Haskell 98就可以做到 - 事实上,完全不依赖于包装。

答案 1 :(得分:6)

如果您正在处理真实世界项目(tm),我强烈推荐Control.Lens。 Edwardk最近付出了很多努力,我相信他很想知道你的用例。在我看来,这将成为规范的镜头库。我相信可以安全地说你可以用Data.Lens做的一切,你可以用Control.Lens。

答案 2 :(得分:0)

Data.Lens更简单,更易于使用。 Control.Lens包含大量模块,并使用语言扩展来完成工作。