2013-08-28 28 views
1

我正在慢慢地試圖圍繞lens程序包的工作原理進行包裝。我讀愛德華的幻燈片(http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf),我有一個關於Store s a載玻片上的8和9的定義問題:Edward Kmett演示文稿中的鏡頭定義不正確?

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 

其中第一個構造函數的參數是二傳手(把一個a並返回s數據結構),第二個是獲取者(從s數據結構獲取a)。

任何人都可以確認它是否是幻燈片中的錯誤,或者如果我的理解不正確,請解釋。

謝謝。

回答

5

是的,這看起來像一個錯誤。但Store是正確的 - 這是一個標準的comonad。 Lens的定義應該是newtype Lens s a = Lens (s -> Store a s)

+1

啊,它實際上是'儲存一個s';我誤讀了。對困惑感到抱歉 :( – gnuvince