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. Vuex - 店舗を流れるデータは何ですか?
- 3. 店舗一覧は
- 4. 店舗構成はどこですか?
- 5. 問題:店舗
- 6. 店舗コード
- 7. 店舗プライベートメンバーが
- 8. 店舗txtファイル
- 9. 店舗マップ
- 10. エクセルマクロ店舗VLOOKUPの値と
- 11. 店舗の店舗の商品を検索する
- 12. 変換は、店舗手順
- 13. や店舗のnvarchar
- 14. Magmi多店舗インポート
- 15. 店舗スケジュールのデータベーススキーム
- 16. 煎茶タッチ:店舗
- 17. ExtJSの5店舗
- 18. Senchaは複数の店舗の店舗インスタンスを1つ手にします
- 19. 店舗のルートカテゴリを探す
- 20. React + Flux:店舗をリセットするには?
- 21. 店舗jqueryの配列
- 22. @ Ngrx /ビルダーパターン付き店舗
- 23. ベスト "店舗ロケータ" - "マップ" jQueryプラグイン?
- 24. 店舗出荷時間
- 25. 煎茶タッチ:宣言店舗
- 26. フィルタアレイ、店舗隣接情報
- 27. 小道具で(店舗)変更する
- 28. Magento:同じ店舗の異なる店舗ビューの異なる商品ですか?
- 29. Magento - 複数店舗、商品がカートに追加された店舗を
- 30. drupal commerceの店舗を作成し、店舗IDをメールチンパンバーで取得する方法は?
StateとStore間の接続を拡張するだけで、すべてのモナドはadjoint functorのコンポジションから発生します。一般的には、ファンクター '(r - > _)'(別名Reader)と '(_、r)'(フリップされたものもありますが、ハスケルの国の通常の表示には適合しません。 HaskellのFunctorインスタンス)は随伴型であり、一方向( 's - >(_、s)')を作成するとモナドが得られ、逆に ' s) ')あなたはコモナードを手に入れます。 – copumpkin
@copumpkin:それはFunctorではない '(_、r)'ですね。 '(r、_)'は単にインスタンスのFunctor((、)r)です。 – ehird
ええ、申し訳ありませんが、私は括弧内の発言を間違って編集しました:) – copumpkin