我正在慢慢地试着了解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
数据结构)。
任何人都可以确认幻灯片中是否有错误,或者如果我的理解不正确,请解释。
谢谢。
答案 0 :(得分:5)
是的,这看起来像是一个错误。但是Store
是正确的 - 它是一个标准的comonad。 Lens
的定义应为newtype Lens s a = Lens (s -> Store a s)
。