Haskell の Comonad 型クラスが何であるかについてある程度の考えを持っているので、 Store comonad について聞いたことがあります。しかし、Control.Comonad.Store.Lazyを見ると、よくわかりません。どういう意味ですか?それはなんのためですか?State Monad の双対である Store = CoState と聞いたことがあります。どういう意味ですか?
7638 次
2 に答える
48
次のストアの定義を考えると、
data Store s a = Store { peek :: s -> a, pos :: s }
私は aStore
を type の値で満たされた大きな倉庫と考えるのが好きa
です。type の各値は、 typea
のインデックス値でラベル付けされた位置に挿入されますs
。最後に、位置 にフォークリフトが駐車されていpos
ます。フォークリフトは、駐車している場所から値を引き出すことにより、ストアからextract
タイプの値に使用できます。a
を使用seek
してフォークリフトを新しい絶対位置seeks
に移動したり、 を使用してフォークリフトを新しい相対位置に移動したりできます。ストアのすべての値を更新するには、 を使用しますfmap
。最後に、私たちが持っている代わりにexceptにextend f
似ていますfmap
f :: a -> a'
f :: Store s a -> a'
これにより、更新関数は更新される値にアクセスできるだけでなく、値の位置とストア内の他のすべての値にアクセスすることもできます。つまり、extend
値とその周囲のコンテキストを使用して更新を実行します。
よりコンピュータ的な類推はStore
、さまざまな位置に値が保存されているハードディスクの大きなプラッターと、特定の位置に停止しているヘッドと考えることです。
于 2012-06-24T17:29:42.803 に答える