可能重复:
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
答案 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
包含大量模块,并使用语言扩展来完成工作。