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

gnu*_*nce 1 haskell

我正在慢慢地试图解决lens包装的工作原理.我正在阅读Edward的幻灯片(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
Run Code Online (Sandbox Code Playgroud)

定义是否倒退?如果镜头是一对吸气剂和固定剂,在我看来Store s a应该被定义为:

data Store s a = Store (a -> s) a
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

sha*_*haf 5

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