haskell - 变形与镜头有何关系?

标签 haskell recursion category-theory haskell-lens

镜头、记录访问器(accessor)如何,例如

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 中重新实现了-态射。 然后我就想到了上面的问题。

最佳答案

伯德的 SQUIGGOL 形式主义中的镜片与作为功能引用的镜片的现代​​概念之间绝对没有任何联系。

递归方案和函数引用是不相关的概念。

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

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

“镜头”一词在功能引用意义上是指它着眼于整体的一部分。递归方案意义上的术语“透镜”是指 [()] 在语法上看起来有点像凹透镜。

tl;dr他们之间没有任何关系。

关于haskell - 变形与镜头有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198072/

相关文章:

haskell - 如何将范畴论图与多元函数一起使用?

haskell - 在 Yesod 生态系统中,对一些文本进行 urlencode 的最佳方式是什么?

javascript - 递归搜索 JSON 对象中的属性名称 {String} 并返回关联值

c++ - 至少长度为 L 的最大连续子序列和(递归)

haskell - 在 Haskell 中,map 函数是一个仿函数吗?

haskell - 基于右 Kan 扩展的列表

haskell - 如何从 Haskell 中的文本 block 中提取关键字

haskell - 如何提升函数在镜片上的作用?

haskell - 如何编写状态 Monad 的实例

java - 递归打印