問題タブ [alternative-functor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskell IO の MonadPlus 定義
ちょっとしたコードを書いていて、IO モナドでガード関数を使いたいと思っていました。ただし、IO 用の MonadPlus の定義がないため、IO ランドではガードを使用できません。MabyeT トランスフォーマーを使用して Maybe Monad でガードを使用し、すべての IO アクションを持ち上げる例を見てきましたが、必要がない場合は実際にはそうしたくありません。
私が欲しいものの例は次のとおりです。
MonadPlus またはそれ以外の宣言を通じて、IO モナドでガード関数 (または同様のもの) を取得する良い方法があるかどうか疑問に思っていました。あるいは、私のやり方が間違っているのかもしれません。上記の関数でそのヘルプ メッセージを記述するより良い方法はありますか? ありがとう。
(PS if-then-else ステートメントを使用できますが、どういうわけかポイントを無効にしているようです。多くのオプションでは、大量のネストが発生することは言うまでもありません。)
haskell - Haskell: 一部と多数
some
とは何の役に立つのmany
ですControl.Applicative.Alternative
か? のようなものを書くとsome $ Just 42
、無限再帰が発生するようで、あまり役に立ちません...
haskell - Haskell-Control.Applicative.Alternativeは何に適していますか?
Haskellライブラリ内のクラスを見ていてApplicative
、偶然見つけましAlternative
た。
このクラスは何に適していますか?グーグル検索は特に洞察に満ちたものを明らかにしませんでした。そして、それは完全に場違いのようで、Applicativeパッケージにそのままバンドルされています。
誰かがあなたがこのクラスを使う可能性のあるシナリオを投稿してくれませんか?
haskell - 「ユニット」クラスはありますか?役に立ちますか?
単一の単位値を持つタイプ(ここで正しい用語がわからない)、つまり事前定義された値を持つタイプのクラスはありますか?
...すべてのモノイド、MonadPlusなど。
クラスの別の名前は。かもしれないと思いますDefault
。これは私にとって最近2回役に立ちました。
おそらく説得力のない例:
これは存在しますか?他の人はそれが役に立つかもしれないと思いますか?
haskell - 'Alternative'型クラスの'some'および'many'関数
関数some
と型クラスmany
は何にAlternative
役立ちますか?ドキュメントは、私が理解できなかった再帰的定義を提供します。
haskell - `Control.Applicative.optional`の非パーサーの例
私は最近、一般的なControl.Applicative.optional
コンビネータに出くわしました:
しかし、私はそのコンビネータの実用性はあまりありません。たとえば、リストやなどの純粋なファンクタに適用した場合Maybe
、結果はあまり有用ではないようです。
...より賢明なアプリケーションは何でしょうoptional
か?
haskell - 型クラスMonadPlus、Alternative、Monoidの違いは?
標準ライブラリのHaskell型クラス、、、MonadPlus
およびAlternative
それぞれMonoid
は、本質的に同じセマンティクスを持つ2つのメソッドを提供します。
- 空の値:
mzero
、、、empty
またはmempty
。 a -> a -> a
タイプクラスの値を結合する演算子:mplus
、、、<|>
またはmappend
。
3つすべてが、インスタンスが準拠する必要があるこれらの法則を指定します。
したがって、3つの型クラスはすべて同じメソッドを提供しているようです。
(Alternative
とも提供some
しmany
ますが、通常はデフォルトの定義で十分なので、この質問に関してはそれほど重要ではありません。)
だから、私の質問は:なぜこれらの3つの非常に似たクラスがあるのですか?スーパークラスの制約が異なること以外に、それらの間に実際の違いはありますか?
haskell - Haskell の終了状態モナドを早期に (ガード?)
私は自分のアプリケーションのゲーム状態を表す型を持っています。
State モナドでゲームロジックを定義します。
一部の入力を単純に破棄できるようにしたい
このような構文が必要です
ガードに当たってしまったらそのまま放置して、ブロック内は何もしないようにしたいです。
どうすればいいですか?MonadPlus でほぼ可能に思えますが、mzero を使用して「状態に既にあるものを返す」ことができるかどうかはわかりません。ありがとう!
haskell - 「代替」型クラスの意味と他の型クラスとの関係に混乱している
Typeclassopediaを調べて、型クラスを学習しました。私は理解に行き詰まっていますAlternative
(そしてMonadPlus
、さらに言えば)。
私が抱えている問題:
ペディアによると、「Alternative 型クラスは、モノイド構造も持つ Applicative ファンクター用です。」よくわかりません -- オルタナティブとは、モノイドとはまったく違うものを意味するのではないですか? つまり、Alternative 型クラスのポイントは 2 つのものの間で選択することであると理解していましたが、モノイドはものを組み合わせることであると理解していました。
empty
Alternative にメソッド/メンバーが必要なのはなぜですか? 私は間違っているかもしれませんが、まったく使用されていないようです...少なくとも私が見つけたコードでは。そして、それはクラスのテーマに合わないようです.2つのものがあり、1つを選択する必要がある場合、「空」は何のために必要ですか?Alternative 型クラスに Applicative 制約が必要なのはなぜ
* -> *
ですか? なぜ持っていないの<|> :: a -> a -> a
ですか?すべてのインスタンスは同じ方法で実装できます...私は(確信が持てません)と思います。モノイドが提供しない価値は何ですか?MonadPlus
型クラスのポイントは何ですか?Monad
何かを aとの両方として使用するだけで、その良さをすべて解き放つことはできませんAlternative
か? なぜそれを捨てないのですか?(私は間違っていると確信していますが、反例はありません)
願わくば、これらすべての質問が首尾一貫していることを願っています ... !
報奨金の更新: @Antal の回答は素晴らしいスタートですが、Q3 はまだ開いています: Monoid が提供しないオルタナティブは何を提供しますか? この回答は、具体的な例と、Alternative のより高い親切さが Monoid とどのように区別されるかについての具体的な議論がないため、満足のいくものではありません。
Applicative の効果と Monoid の動作を組み合わせる場合は、次のようにしてください。
多くの Monoid インスタンスは Alternative インスタンスとまったく同じであるため、これは私にとってさらに混乱を招きます。
だからこそ、オルタナティブが必要な理由と、それがモノイドとどのように異なるか、または何か異なることを意味するかを示す具体的な例を探しています.
haskell - MonadPlus ではなく、Alternative である Monad の例は何ですか?
Edward Kmettは、 「型クラス、、、および?」の違い</a>に対する彼の回答で、次のように述べています。MonadPlus
Alternative
Monoid
さらに、
Applicative
が のスーパークラスだったとしても、とにかくMonad
そのクラスが必要になることになります。MonadPlus
厳密にはそれを証明するのに十分ではありません
したがって、何かが であると主張することは、
MonadPlus
それが であると主張することよりも強力ですAlternative
。
モナドではないAlternative
アプリカティブ・ファンクターは、自動的にではないan の例になることは明らかですが、エドワード・クメットの答えは、 anであるがaではないモナドMonadPlus
が存在することを暗示しています。法律。2 この例を自分で思いつくことはできません。誰か知っていますか?Alternative
MonadPlus
empty
<|>
Alternative
MonadPlus
1一連の法則の正規の参照を見つけることができませんでしたが、「Alternative
型クラスの意味と他の型との関係に混乱している」という質問への回答のほぼ半分であると思われるものを並べますクラス」</a> (「右分配性」という語句を検索してください)。私が守らなければならないと信じている4つの法則は次のとおりです。Alternative
- 右分配 (の
<*>
):(f <|> g) <*> a = (f <*> a) <|> (g <*> a)
- 右吸収 ( の場合
<*>
):empty <*> a = empty
- 左分配係数 (の
fmap
):f <$> (a <|> b) = (f <$> a) <|> (f <$> b)
- 左吸収 ( の場合
fmap
):f <$> empty = empty
Alternative
また、より有用な一連の法律が与えられることも喜んで受け入れます。
2私は法律が何であるかについて曖昧さがあることMonadPlus
を知っています。左分布または左キャッチを使用する答えに満足していますが、前者の方が少し好きです。