1

我正在慢慢地试图了解这个lens包是如何工作的。我正在阅读 Edward 的幻灯片(http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdfStore 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(as数据结构中获取)。

谁能确认这是否是幻灯片中的错误,或者我的理解不正确,请解释。

谢谢你。

4

1 回答 1

5

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

于 2013-08-28T04:46:56.127 回答