Data.Lens或Control.Lens是什么?

10

可能是重复的问题:
lenses,fclabels,data-accessor - 哪个库更好地用于结构访问和修改

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

我还不太理解它们之间的区别,无法决定使用哪个。你会建议我在真实世界的项目中学习/使用哪个包呢?

谢谢。

lenses,fclabels,data-accessor - 哪个库更好地用于结构访问和修改


4
那个 Stack Overflow 链接的答案有什么问题? - Pubby
那个SO链接的答案可能有问题,但如果你不告诉我们你想知道什么不在那个答案中,你将得不到你想要的信息。 - Ben
2
我猜我正在寻找第三方的观点。那篇SO帖子是由这两个软件包的创建者编写的。他确实在两者之间进行了一些比较,但对我来说有点难以理解。 - MFlamer
3
另一篇文章甚至没有提到 Control.Lens,因此我不认为这是重复的。 - Adam Gordon Bell
3个回答

13

Control.Lens几乎肯定是你想要的。 Data.Lens是先前版本,相对简单,但是Control.Lens具有许多优点,并正在积极开发中。

除了镜头外,Control.Lens还有许多相关类型,例如可穿越(类似于可以引用n个值而不仅仅是一个的镜头),折叠,只读修改镜头,索引镜头,同构等... 它还附带了一个更大的实用函数和预定义镜头的库以及用于生成镜头的模板Haskell,以及一堆其他东西的代码,如通用拉链和uniplate风格的通用遍历。

这是一个很大的库--您不必使用其中所有内容,但拥有已经编写好的所需代码确实很好。

Data.Lens的主要优点是它更加简单,因此不需要超出Haskell 98之外的扩展。但是请注意,如果您只想从库中导出一个类似于Control.Lens的镜头,则可以在不离开Haskell 98的情况下完成此操作--实际上,甚至无需依赖整个包。


昨晚再做了一些研究后,我得出了相同的结论。感谢您的出色回复。 - MFlamer

6

如果你正在处理一个真实世界的项目,我强烈推荐使用Control.Lens。Edwardk最近在这方面投入了很多精力,我相信他会很乐意听取你的用例。在我看来,这将成为标准的Lens库。我相信可以说,你可以用Data.Lens做的一切,你都可以用Control.Lens做到。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接