爱德华·凯梅特演讲中的镜头定义不正确?



我正在慢慢地思考lens包是如何工作的。我在看爱德华的幻灯片(http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf)我有一个关于Store s a在幻灯片8和9上的定义的问题:

newtype Lens s a = Lens (s -> Store s a)
data Store s a = Store (s -> a) s

这个定义倒过来了吗?如果透镜是一对getter和setter,在我看来Store s a应该定义为:

data Store s a = Store (a -> s) a

其中第一个构造函数参数是setter(放入a并返回s数据结构),第二个是getter(从s数据结构中获取a)。

有人能确认这是幻灯片中的错误吗,或者我的理解是错误的,请解释。

谢谢。

是的,这看起来像是一个错误。但Store是正确的——它是一个标准的共聚体。Lens的定义应该是newtype Lens s a = Lens (s -> Store a s)

最新更新