我正在慢慢地试图解决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(a从s数据结构中获取).
任何人都可以确认幻灯片中是否有错误,或者如果我的理解不正确,请解释.
谢谢.
是的,这看起来像是一个错误.但这Store是正确的 - 这是一个标准的comonad.定义Lens应该是newtype Lens s a = Lens (s -> Store a s).
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |