Data.Lens或Control.Lens

MFl*_*mer 11 haskell lenses

可能重复:
镜头,fclabels,数据访问器 - 用于结构访问和变异的库更好

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

我还不太了解差异,还没决定使用哪一个.您建议我在真实项目中学习/使用哪个软件包?

谢谢.

镜头,fclabels,数据访问器 - 用于结构访问和变异的库更好

sha*_*haf 14

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

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

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

它的主要优点Data.Lens是它更简单,因此不需要超出Haskell 98的扩展.但请注意,如果你只想Control.Lens从库中导出一个镜头,你可以在不离开Haskell 98的情况下实现 - 事实上,完全不依赖于包装.


Dan*_*ton 6

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