Alternative」タイプクラスの意味と他のタイプクラスとの関係に戸惑う
質問
私はこれまで
タイプ・クラス・ペディア
を読み、型クラスについて学んでいます。 私は理解するのに行き詰まりました
Alternative
(そして
MonadPlus
は、その点では)。
私が抱えている問題
-
ペディアによると、"Alternative型クラスはモノイド構造も持つApplicativeファンクタのためのものだそうですが、これは理解できません。
-
なぜAlternativeは
empty
メソッド/メンバが必要なのでしょうか? 私が間違っているかもしれませんが、それは全く使われていないようです... 少なくとも コード を見つけることができました。 そして、それはクラスのテーマに合わないようです。2つのものがあり、1つを選ぶ必要がある場合、何のために「空」が必要なのでしょうか? -
なぜAlternative型クラスはApplicative制約を必要とし、なぜ一種の
* -> *
? なぜ単に<|> :: a -> a -> a
? すべてのインスタンスは、まだ同じ方法で実装することができます.... と思うのですが、どうでしょう? Monoidになくてどんな価値を提供するのでしょうか? -
は何のためにあるのでしょうか?
MonadPlus
型クラスは何のためにあるのでしょうか? として使うことで、その良さをすべて開放することはできないのでしょうか?Monad
とAlternative
? なぜそれを捨てないのか? (私が間違っているのは確かですが、反例がありません)
これらの質問がすべて首尾一貫していることを望みます... !
懸賞金の更新です。Alternativeが提供するもので、Monoidが提供しないものは何ですか? 私は この回答 は、具体的な例や、Alternativeの上位概念がMonoidとどのように異なるのかについての具体的な議論を欠いているため、満足のいくものではありません。
もし、applicativeの効果とMonoidの動作を組み合わせるためであれば、なぜそうしないのでしょうか。
liftA2 mappend
多くのMonoidインスタンスはAlternativeインスタンスと全く同じなので、これは私にとってはさらに混乱することです。
というわけで、私が探しているのは 具体的な例 が必要な理由、そしてAlternativeがMonoidとどのように違うのか、あるいは違うことを意味するのかを示す具体的な例を探しているのです。
どのように解決するのですか?
MonadPlusについては、その法則に異論があるため、ここでは取り上げないことにします。
Applicativeの構造が、そのMonoidインスタンス*と不一致のAlternativeインスタンスに自然につながる、意味のある例を見つけようと試みて失敗した後、私は最終的にこれを思いつきました。
Alternativeの法則はMonoidの法則よりも厳密です。
は
は内部型に依存することができないからです。 このため、多くのMonoidインスタンスがAlternativeであることから除外されています。
の余分な「構造」によって禁止されている部分的な(つまり、いくつかの内部型に対してのみ動作する)Monoidインスタンスを許可するデータ型です。
* -> *
型の余分な「構造」によって禁止されているMonoidインスタンスを許可します。 例として
-
Monoid の標準的な Maybe インスタンスは、内部型が Monoid => であり、Alternative でないことを仮定しています。
-
ZipList、タプル、関数はすべてMonooidにすることができます。 もし その内部型がモノイド => であり、代替型でない場合。
-
少なくとも1つの要素を持つシーケンスには
empty
:data Seq a = End a | Cons a (Seq a) deriving (Show, Eq, Ord)
一方、いくつかのデータ型はAlternativeにすることができないので、それらは
*
-kindedであるためです。
-
ユニット
()
-
Ordering
- 数字、ブーリアン
私の推論した結論 AlternativeとMonoidの両方のインスタンスを持つ型では、インスタンスは同じであることが意図されています。 また この回答 .
を除いて、標準的なインスタンスは内部型にMonoidを必要としないため、カウントされないと主張します(その場合、Alternativeと同一になります)。
関連
-
[解決済み] Haskellで副作用がモナドとしてモデル化されているのはなぜですか?
-
[解決済み] Haskellにはなぜ "data "と "newtype "があるのですか?重複] [重複] [重複
-
[解決済み] Haskellのリストを参照する際の「@」記号の意味は?
-
[解決済み] HaskellとF#の主な違いは何ですか?[クローズド]
-
[解決済み] Haskellはガベージコレクタを必要としますか?
-
[解決済み] Java の Interface と Haskell の type class: 違いと類似点?
-
[解決済み] Haskellのガードとif-then-elseとcaseの比較
-
[解決済み] Haskellの派生はどのように行われるのですか?
-
[解決済み] Data.Voidの不条理な関数って何に使うの?
-
[解決済み] HaskellでHaskellインタプリタを書く
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー haskell: スコープ内にありません。どういう意味ですか?
-
[解決済み] Hindley-Milnerのどの部分が理解できないのでしょうか?
-
[解決済み] 制約条件付き特殊化
-
[解決済み] Haskellのmapにはfmapがあるのに、何の意味があるのだろう?
-
[解決済み] ハスケルでControl.Monad.Writerを遊ぶには?
-
[解決済み] Haskellには末尾再帰的最適化があるか?
-
[解決済み] Haskell: なぜヘルパー関数に "go" という名前を付けるのですか?
-
[解決済み] 難読化されたHaskellのコードはどのように動作するのでしょうか?
-
[解決済み] MonadPlus, Alternative, Monoidの型別は?
-
[解決済み] 直観主義型理論の組合せ論的等価性とは?