我正在慢慢地思考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)
。