10

可能重复:
lens、fclabels、data-accessor - 用于结构访问和变异的库更好

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

我还不太了解这些差异,无法决定使用哪一个。你会建议我在现实世界的项目中学习/使用哪个包?

谢谢。

lens, fclabels, data-accessor - 用于结构访问和变异的库更好

4

3 回答 3

13

Control.Lens几乎可以肯定是你想要的。Data.Lens先来,比较简单,但是Control.Lens有很多优点,正在积极开发中。

除了镜头,Control.Lens还有许多相关的类型,比如遍历(遍历就像一个镜头,可以引用 n 个值而不仅仅是一个)、折叠、只读/修改镜头、索引镜头、同构......用于标准库类型的有用函数和预定义镜头的更大库,用于派生镜头的模板 Haskell,以及用于通用拉链和单板式通用遍历等其他东西的一堆代码。

这是一个很大的库——你不必使用所有的东西,但是你想要的东西已经写好了是很好的。

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

于 2012-11-08T13:44:33.297 回答
6

如果您正在处理真实世界项目 (tm),我强烈推荐 Control.Lens。Edwardk 最近投入了大量精力,我相信他很想听听您的用例。在我看来,这将成为规范的 Lens 库。我相信可以肯定地说,你可以用 Data.Lens 做的所有事情,你都可以用 Control.Lens 做。

于 2012-11-08T07:14:57.437 回答
0

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

于 2012-11-08T21:27:37.307 回答