タグ付けされた質問 「comonad」

1
ジッパーがコモナドである理由の理解
これは私の前の質問に対する回答のフォローアップです。 私は、各項目をマッピングする必要があるとa:AのList[A]のb:B機能をdef f(a:A, leftNeighbors:List[A]): Bして生成しますList[B]。 もちろんmap、リストを呼び出すだけではなく、リストジッパーを使用できます。ジッパーは、リスト内を移動するためのカーソルです。現在の要素(focus)とその隣接要素へのアクセスを提供します。 今、私は自分を置き換えることができfて def f'(z:Zipper[A]):B = f(z.focus, z.left)、この新しい関数を渡すf'にcobindする方法Zipper[A]。 これcobindは次のように機能します。f'ジッパーでそれを呼び出してから、ジッパーを移動f'し、新しい「移動した」ジッパーで呼び出し、ジッパーを再び移動し、以下同様に、ジッパーがリストの最後に到達するまで続けます。 最後に、cobindはタイプの新しいジッパーを返しますZipper[B]。これはリストに変換できるため、問題は解決されます。 今の対称性を注意cobind[A](f:Zipper[A] => B):Zipper[B]し、bind[A](f:A => List[B]):List[B]だからこそListであるMonadとZipperされますComonad。 理にかなっていますか?

2
HaskellのComonadタイプクラスとは何ですか?
HaskellのComonadタイプクラスとは何ですか?ComonadのようにcomonadパッケージでControl.Comonad(Comonadの型クラスを提供し、他のパッケージの説明にも歓迎されています)。私は漠然とコモナドについて聞いたことがありますが、私がそれについて本当に知っているのは、それがextract :: w a -> aモナドの一種の類似物を提供することだけですreturn :: a -> m a。 「実際の」コードでのComonadの「実際の」使用に注意することのボーナスポイント。

3
ジッパーコモナド、一般的に
任意のコンテナタイプが与えられると、(要素に焦点を合わせた)ジッパーを形成し、この構造がコモナドであることがわかります。これは最近、次のタイプの別のStackOverflowの質問で非常に詳細に調査されました。 data Bin a = Branch (Bin a) a (Bin a) | Leaf a deriving Functor 次のジッパー付き data Dir = L | R data Step a = Step a Dir (Bin a) deriving Functor data Zip a = Zip [Step a] (Bin a) deriving Functor instance Comonad Zip where ... …

1
継続モナドを左と右の随伴に因数分解する方法は?
状態モナドは積(左-ファンクター)とリーダー(右-表現可能)に因数分解できます。 継続モナドを因数分解する方法はありますか?以下のコードは、チェックを入力しない私の試みです -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable for this type synonym class Isomorphism a b where from :: a -> …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.