2013-06-19 31 views
3

镜头,记录访问器如何变形与透镜有什么关系?

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

相关anamorphism?例如

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。 然后上面的问题发生在我身上。

+2

要明确一点:纸张标题中的“镜头”是指它们使用的括号,而不是功能镜头。你可能已经知道这一点,但它让我困惑了一会儿:P。 –

+0

@TikhonJelvis - 在论文中使用的“squiggol”括号的着名纸质比喻性描述中,以及之前由Richard Bird使用的不是Bananas,Lenses等? –

+2

@stephentetley是的,但它们只是两个不相关的概念,如[Monad](https://en.wikipedia.org/wiki/Monad_(functional_programming))和[Monad](http://en.wikipedia .ORG /维基/ Monad_(哲学))。 –

回答

10

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

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

这只是术语中的一个不幸巧合。不幸的是,这往往意味着当人们看到他们试图回到“源头”的名字时,就会感到非常困惑!

如果您想查找有关镜头主题的早期论文,最好通过阅读本杰明皮尔斯在Boomerang上的论文来获得更好的服务。在那里他定义了几个镜头的概念。那些与Haskell中使用的函数引用形式相对应的将是他所称的“非常好表现的镜头”。然后他继续将它们推向与我在lens包中采用的路径不同的方向。他专注于使用它们来恢复不变量,而“非常好表现”的镜头并没有首先打破不变量。

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

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

相关问题