6

Lens,记录访问器如何,例如

http://hackage.haskell.org/packages/archive/lens/3.9.0.2/doc/html/Control-Lens-Type.html#t:Lens

与变形有关?例如

http://hackage.haskell.org/packages/archive/recursion-schemes/3.0.0.2/doc/html/Data-Functor-Foldable.html#v:ana

你能让前者成为后者的实例吗?

我最近经常使用镜头。在 Haskell 编程中,镜头在许多方面都至关重要。它们是用于记录访问、有状态程序的工具……为了更好地理解镜头,我开始阅读“香蕉、镜头、信封和铁丝网”论文。在“INSIDE 206-105”的帮助下,我慢慢地重新实现了 Haskell 中的 -morphisms。然后我想到了上面的问题。

4

1 回答 1

13

Bird 的 SQUIGGOL 形式主义中的镜片与作为功能参考的现代镜片概念之间绝对没有任何联系。

递归方案和功能引用是不相关的概念。

这只是术语上的不幸巧合。不幸的是,这通常意味着当人们看到这些名字时,他们会试图回到“源头”并最终感到非常困惑!

如果您想找到有关镜头主题的早期论文,最好阅读 Benjamin Pierce 关于 Boomerang 的论文。在那里,他定义了镜头的几个概念。对应于 Haskell 中使用的功能引用形式的那些将是他所谓的“表现非常好的镜头”。然后,他继续将它们概括为与我在lens包装中采用的路径不同的方向。他专注于使用它们来恢复不变量,而“表现良好”的镜头从一开始就不会破坏不变量。

功能参考意义上的术语“镜头”指的是它看到整体的一部分这一事实。递归方案意义上的“透镜”一词是指在语法上看起来有点像凹透镜的[(事实)]

tl; dr他们彼此没有任何关系。

于 2013-06-19T19:32:08.127 回答