我将在我的下一个Haskell项目中使用并学习Lens包。当我发现这篇文章提到了Control.Lens
包中的van Laarhoven Lenses时,我几乎已经决定要使用Data.Lens
包。
我还不太理解它们之间的区别,无法决定使用哪个。你会建议我在真实世界的项目中学习/使用哪个包呢?
谢谢。
我将在我的下一个Haskell项目中使用并学习Lens包。当我发现这篇文章提到了Control.Lens
包中的van Laarhoven Lenses时,我几乎已经决定要使用Data.Lens
包。
我还不太理解它们之间的区别,无法决定使用哪个。你会建议我在真实世界的项目中学习/使用哪个包呢?
谢谢。
Control.Lens
几乎肯定是你想要的。 Data.Lens
是先前版本,相对简单,但是Control.Lens
具有许多优点,并正在积极开发中。
除了镜头外,Control.Lens
还有许多相关类型,例如可穿越(类似于可以引用n个值而不仅仅是一个的镜头),折叠,只读修改镜头,索引镜头,同构等... 它还附带了一个更大的实用函数和预定义镜头的库以及用于生成镜头的模板Haskell,以及一堆其他东西的代码,如通用拉链和uniplate风格的通用遍历。
这是一个很大的库--您不必使用其中所有内容,但拥有已经编写好的所需代码确实很好。
Data.Lens
的主要优点是它更加简单,因此不需要超出Haskell 98之外的扩展。但是请注意,如果您只想从库中导出一个类似于Control.Lens
的镜头,则可以在不离开Haskell 98的情况下完成此操作--实际上,甚至无需依赖整个包。
如果你正在处理一个真实世界的项目,我强烈推荐使用Control.Lens。Edwardk最近在这方面投入了很多精力,我相信他会很乐意听取你的用例。在我看来,这将成为标准的Lens库。我相信可以说,你可以用Data.Lens做的一切,你都可以用Control.Lens做到。
Data.Lens
更加简单易用。而 Control.Lens
则有大量的模块,并使用语言扩展来完成工作。