what the Comonad typeclass is in Haskellのアイデアを持って、私は店のコモナードについて聞いたことがあります。しかし、Control.Comonad.Store.Lazyを見ると、私はそれを実際には得られません。どういう意味ですか?それはなんのためですか?私はStore = CoStateというステートモナドの二重ということを聞いたことがある。どういう意味ですか?店舗コモナードとは何ですか?
答えて
StoreT itselfの定義を見ると、はるかに簡単です。
あなたはもっと大きな構造の「場所」と考えることができます。たとえば、lensはちょうどa -> Store b a
です。 bフィールドの値を取得し、関数b -> a
を使用して新しい値を大きなコンテキストに戻します。
data Store s a = Store (s -> a) s
instance Functor (Store s) where
fmap f (Store g s) = Store (f . g) s
instance Extend (Store s) where
duplicate (Store f s) = Store (Store f) s
instance Comonad (Store s) where
extract (Store f s) = f s
すなわちduplicate
だけの値を交換した後、「更新」の場所を返しs -> Store s a
にs -> a
を変更し、extract
は、元復元:
その単純化し、非トランスフォームでそれを考えるとを使用して、値を大きな構造に戻します。
限り、国家との関係が行くとして、あなたはこのようにそれを見て可能性:ストアの次の定義を考えると
type State s a = s -> (a, s)
type Store s a = (s -> a, s)
、
data Store s a = Store { peek :: s -> a, pos :: s }
私のようにStore
と考えたいです大きな倉庫には、タイプa
の値が入っています。タイプa
の各値は、タイプs
のインデックス値でラベル付けされた位置にスロットされます。最後に、位置pos
に駐車されたフォークリフトがあります。フォークリフトは、extract
に、店舗からのタイプa
の値に、駐車場所から値を引き出すことによって使用することができます。 seek
を使用してフォークリフトを新しい絶対位置に移動するか、seeks
を使用してフォークリフトを新しい相対位置に移動できます。ストアのすべての値を更新するには、fmap
を使用します。最後にextend f
はf :: a -> a'
の代わりにf :: Store s a -> a'
の代わりにfmap
と似ています。更新機能は更新される値にアクセスするだけでなく、値の位置にアクセスし、ストア内の他の値にアクセスすることができます。換言すれば、extend
は、値にその周囲のコンテキストを加えて更新を実行する。
より計算機的には、Store
は、さまざまな位置に値が格納されたハードディスクの大きなプラッタと、特定の位置に駐車されたヘッドと考えることです。
- 1. フラックスは、店舗
- 2. 店舗一覧は
- 3. 店舗プライベートメンバーが
- 4. Magmi多店舗インポート
- 5. 煎茶タッチ:店舗
- 6. ExtJSの5店舗
- 7. や店舗のnvarchar
- 8. 変換は、店舗手順
- 9. Senchaは複数の店舗の店舗インスタンスを1つ手にします
- 10. 店舗のルートカテゴリを探す
- 11. 煎茶タッチ:宣言店舗
- 12. ベスト "店舗ロケータ" - "マップ" jQueryプラグイン?
- 13. 店舗出荷時間
- 14. Magento - 複数店舗、商品がカートに追加された店舗を
- 15. Magento:同じ店舗の異なる店舗ビューの異なる商品ですか?
- 16. iOS iBooksは店舗のアニメーションを好む
- 17. Sencha touch 2.0:店舗でのカスタムモデル検証
- 18. 店舗でのSencha Touchの問題
- 19. Sencha Touch - 店舗はしばしば高価ですか?
- 20. 私の店舗はなぜnilですか?
- 21. ブラックベリーのプレイブックアプリを店舗にアップデートする
- 22. Fluxの店舗を利用する
- 23. 店舗クレジットをサポートするオンラインストア
- 24. 取り扱い店舗開閉時間店
- 25. Magento。特定の店舗ビューにリダイレクト
- 26. GoogleショッピングAPI - 複数店舗情報
- 27. ExtJSの店舗の日付フィルタ
- 28. Magento:店舗連絡先電話
- 29. form.phtmlに店舗名を追加Magento
- 30. 異なる店舗のiPhoneアプリケーション名
StateとStore間の接続を拡張するだけで、すべてのモナドはadjoint functorのコンポジションから発生します。一般的には、ファンクター '(r - > _)'(別名Reader)と '(_、r)'(フリップされたものもありますが、ハスケルの国の通常の表示には適合しません。 HaskellのFunctorインスタンス)は随伴型であり、一方向( 's - >(_、s)')を作成するとモナドが得られ、逆に ' s) ')あなたはコモナードを手に入れます。 – copumpkin
@copumpkin:それはFunctorではない '(_、r)'ですね。 '(r、_)'は単にインスタンスのFunctor((、)r)です。 – ehird
ええ、申し訳ありませんが、私は括弧内の発言を間違って編集しました:) – copumpkin