1. ホーム
  2. haskell

Alternative」タイプクラスの意味と他のタイプクラスとの関係に戸惑う

2023-12-07 02:32:58

質問

私はこれまで タイプ・クラス・ペディア を読み、型クラスについて学んでいます。 私は理解するのに行き詰まりました Alternative (そして MonadPlus は、その点では)。

私が抱えている問題

  • ペディアによると、"Alternative型クラスはモノイド構造も持つApplicativeファンクタのためのものだそうですが、これは理解できません。

  • なぜAlternativeは empty メソッド/メンバが必要なのでしょうか? 私が間違っているかもしれませんが、それは全く使われていないようです... 少なくとも コード を見つけることができました。 そして、それはクラスのテーマに合わないようです。2つのものがあり、1つを選ぶ必要がある場合、何のために「空」が必要なのでしょうか?

  • なぜAlternative型クラスはApplicative制約を必要とし、なぜ一種の * -> * ? なぜ単に <|> :: a -> a -> a ? すべてのインスタンスは、まだ同じ方法で実装することができます.... と思うのですが、どうでしょう? Monoidになくてどんな価値を提供するのでしょうか?

  • は何のためにあるのでしょうか? MonadPlus 型クラスは何のためにあるのでしょうか? として使うことで、その良さをすべて開放することはできないのでしょうか? MonadAlternative ? なぜそれを捨てないのか? (私が間違っているのは確かですが、反例がありません)

これらの質問がすべて首尾一貫していることを望みます... !


懸賞金の更新です。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と同一になります)。