我将在我的下一个 Haskell 项目中使用和学习 Lens 包。Data.Lens
当我发现这篇文章在包装中提到 van Laarhoven Lenses 时,我几乎已经决定了Control.Lens
包装。
我还不太了解这些差异,无法决定使用哪一个。你会建议我在现实世界的项目中学习/使用哪个包?
谢谢。
我将在我的下一个 Haskell 项目中使用和学习 Lens 包。Data.Lens
当我发现这篇文章在包装中提到 van Laarhoven Lenses 时,我几乎已经决定了Control.Lens
包装。
我还不太了解这些差异,无法决定使用哪一个。你会建议我在现实世界的项目中学习/使用哪个包?
谢谢。
Control.Lens
几乎可以肯定是你想要的。Data.Lens
先来,比较简单,但是Control.Lens
有很多优点,正在积极开发中。
除了镜头,Control.Lens
还有许多相关的类型,比如遍历(遍历就像一个镜头,可以引用 n 个值而不仅仅是一个)、折叠、只读/修改镜头、索引镜头、同构......用于标准库类型的有用函数和预定义镜头的更大库,用于派生镜头的模板 Haskell,以及用于通用拉链和单板式通用遍历等其他东西的一堆代码。
这是一个很大的库——你不必使用所有的东西,但是你想要的东西已经写好了是很好的。
的主要优点Data.Lens
是它更简单,因此不需要 Haskell 98 之外的扩展。但请注意,如果您只想Control.Lens
从库中导出 -style 镜头,您可以在不离开 Haskell 98 的情况下完成 - 事实上,完全不依赖于包。
如果您正在处理真实世界项目 (tm),我强烈推荐 Control.Lens。Edwardk 最近投入了大量精力,我相信他很想听听您的用例。在我看来,这将成为规范的 Lens 库。我相信可以肯定地说,你可以用 Data.Lens 做的所有事情,你都可以用 Control.Lens 做。
Data.Lens
更简单,更容易使用。 Control.Lens
有大量的模块并使用语言扩展来完成工作。