46

Haskell の Comonad 型クラスが何であるかについてある程度の考えを持っているので、 Store comonad について聞いたことがあります。しかし、Control.Comonad.Store.Lazyを見ると、よくわかりません。どういう意味ですか?それはなんのためですか?State Monad の双対である Store = CoState と聞いたことがあります。どういう意味ですか?

4

2 に答える 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似ていますfmapf :: a -> a'f :: Store s a -> a'これにより、更新関数は更新される値にアクセスできるだけでなく、値の位置とストア内の他のすべての値にアクセスすることもできます。つまり、extend値とその周囲のコンテキストを使用して更新を実行します。

よりコンピュータ的な類推はStore、さまざまな位置に値が保存されているハードディスクの大きなプラッターと、特定の位置に停止しているヘッドと考えることです。

于 2012-06-24T17:29:42.803 に答える