Edward Kmett的演讲中镜头定义不正确?

时间:2013-08-28 04:29:19

标签: haskell

我正在慢慢地试着了解lens包的工作原理。我正在阅读Edward的幻灯片(http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf),我对幻灯片8和9中Store s a的定义提出了疑问:

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

定义是否倒退?如果镜头是一对吸气剂和固定剂,我觉得Store s a应定义为:

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

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

任何人都可以确认幻灯片中是否有错误,或者如果我的理解不正确,请解释。

谢谢。

1 个答案:

答案 0 :(得分:5)

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