Haskell 数据。镜头或控件。镜头
可能重复:Haskell 数据。镜头或控件。镜头,haskell,lenses,Haskell,Lenses,可能重复: 我将在下一个Haskell项目中使用和学习一个镜头包。当我发现这篇文章中提到了范拉霍芬镜头时,我几乎已经决定了包装 我还没有真正理解其中的差异,所以决定使用哪一种。您建议我在现实项目中学习/使用哪个软件包 谢谢 如果你正在处理一个真实世界的项目(tm),我强烈推荐Control.Lens。Edwardk最近在这方面做了很多努力,我相信他很乐意听到您的用例。在我看来,这将成为经典透镜库。我相信可以肯定地说,你可以用Data.Lens做任何事情,你可以用Control.Lens做任何事
我将在下一个Haskell项目中使用和学习一个镜头包。当我发现这篇文章中提到了范拉霍芬镜头时,我几乎已经决定了包装 我还没有真正理解其中的差异,所以决定使用哪一种。您建议我在现实项目中学习/使用哪个软件包 谢谢
如果你正在处理一个真实世界的项目(tm),我强烈推荐Control.Lens。Edwardk最近在这方面做了很多努力,我相信他很乐意听到您的用例。在我看来,这将成为经典透镜库。我相信可以肯定地说,你可以用Data.Lens做任何事情,你可以用Control.Lens做任何事情。
Control.Lens
几乎肯定是你想要的Data.Lens
最先出现,而且更简单,但是Control.Lens
有很多优点,正在积极开发中
除了镜头,Control.Lens
有许多相关类型,比如遍历(遍历就像一个镜头,可以引用n个值而不是一个值)、折叠、只读/修改镜头、索引镜头、同构。。。它还提供了一个更大的有用函数库和用于标准库类型的预定义镜头、用于派生镜头的模板Haskell,以及一系列用于其他事情的代码,如通用拉链和uniplate样式的通用遍历
这是一个很大的图书馆——你不必全部使用,但是你想写的东西已经写好了,这很好
Data.Lens
的主要优点是它更简单,因此不需要Haskell 98之外的扩展。但请注意,如果您只想从库中导出控件.Lens
样式的镜头,则无需离开Haskell 98即可完成此操作--事实上,完全不需要依赖于软件包。Data.Lens
更简单,也更易于使用<代码>控制。Lens有大量的模块,并使用语言扩展来完成任务。SO链接的答案有什么问题?该SO链接的答案可能有问题,但是如果你不告诉我们你想知道的答案中没有的东西,你就无法得到你想要的信息。我想这是我要寻找的第三种观点。这篇文章是两个软件包的创建者写的。他确实对这两个做了一些比较,但这有点让我摸不着头脑。另一篇文章甚至没有提到控制镜头,所以我不知道这是一个复制品。经过昨晚的进一步研究,我得出了相同的结论。谢谢你的精彩回复。