問題タブ [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.

0 投票する
3 に答える
2209 参照

haskell - Haskell IO の MonadPlus 定義

ちょっとしたコードを書いていて、IO モナドでガード関数を使いたいと思っていました。ただし、IO 用の MonadPlus の定義がないため、IO ランドではガードを使用できません。MabyeT トランスフォーマーを使用して Maybe Monad でガードを使用し、すべての IO アクションを持ち上げる例を見てきましたが、必要がない場合は実際にはそうしたくありません。

私が欲しいものの例は次のとおりです。

MonadPlus またはそれ以外の宣言を通じて、IO モナドでガード関数 (または同様のもの) を取得する良い方法があるかどうか疑問に思っていました。あるいは、私のやり方が間違っているのかもしれません。上記の関数でそのヘルプ メッセージを記述するより良い方法はありますか? ありがとう。

(PS if-then-else ステートメントを使用できますが、どういうわけかポイントを無効にしているようです。多くのオプションでは、大量のネストが発生することは言うまでもありません。)

0 投票する
1 に答える
2415 参照

haskell - Haskell: 一部と多数

someとは何の役に立つのmanyですControl.Applicative.Alternativeか? のようなものを書くとsome $ Just 42、無限再帰が発生するようで、あまり役に立ちません...

0 投票する
2 に答える
3659 参照

haskell - Haskell-Control.Applicative.Alternativeは何に適していますか?

Haskellライブラリ内のクラスを見ていてApplicative、偶然見つけましAlternativeた。

このクラスは何に適していますか?グーグル検索は特に洞察に満ちたものを明らかにしませんでした。そして、それは完全に場違いのようで、Applicativeパッケージにそのままバンドルされています。

誰かがあなたがこのクラスを使う可能性のあるシナリオを投稿してくれませんか?

0 投票する
3 に答える
271 参照

haskell - 「ユニット」クラスはありますか?役に立ちますか?

単一の単位値を持つタイプ(ここで正しい用語がわからない)、つまり事前定義された値を持つタイプのクラスはありますか?

...すべてのモノイド、MonadPlusなど。

クラスの別の名前は。かもしれないと思いますDefault。これは私にとって最近2回役に立ちました。

おそらく説得力のない例:

これは存在しますか?他の人はそれが役に立つかもしれないと思いますか?

0 投票する
2 に答える
2640 参照

haskell - 'Alternative'型クラスの'some'および'many'関数

関数someと型クラスmanyは何にAlternative役立ちますか?ドキュメントは、私が理解できなかった再帰的定義を提供します。

0 投票する
1 に答える
331 参照

haskell - `Control.Applicative.optional`の非パーサーの例

私は最近、一般的なControl.Applicative.optionalコンビネータに出くわしました:

しかし、私はそのコンビネータの実用性はあまりありません。たとえば、リストやなどの純粋なファンクタに適用した場合Maybe、結果はあまり有用ではないようです。

...より賢明なアプリケーションは何でしょうoptionalか?

0 投票する
1 に答える
6867 参照

haskell - 型クラスMonadPlus、Alternative、Monoidの違いは?

標準ライブラリのHaskell型クラス、、、MonadPlusおよびAlternativeそれぞれMonoidは、本質的に同じセマンティクスを持つ2つのメソッドを提供します。

  • 空の値:mzero、、、emptyまたはmempty
  • a -> a -> aタイプクラスの値を結合する演算子: mplus、、、<|>またはmappend

3つすべてが、インスタンスが準拠する必要があるこれらの法則を指定します。

したがって、3つの型クラスはすべて同じメソッドを提供しているようです。

Alternativeとも提供somemanyますが、通常はデフォルトの定義で十分なので、この質問に関してはそれほど重要ではありません。)

だから、私の質問は:なぜこれらの3つの非常に似たクラスがあるのですか?スーパークラスの制約が異なること以外に、それらの間に実際の違いはありますか?

0 投票する
2 に答える
1206 参照

haskell - Haskell の終了状態モナドを早期に (ガード?)

私は自分のアプリケーションのゲーム状態を表す型を持っています。

State モナドでゲームロジックを定義します。

一部の入力を単純に破棄できるようにしたい

このような構文が必要です

ガードに当たってしまったらそのまま放置して、ブロック内は何もしないようにしたいです

どうすればいいですか?MonadPlus でほぼ可能に思えますが、mzero を使用して「状態に既にあるものを返す」ことができるかどうかはわかりません。ありがとう!

0 投票する
5 に答える
9110 参照

haskell - 「代替」型クラスの意味と他の型クラスとの関係に混乱している

Typeclassopediaを調べて、型クラスを学習しました。私は理解に行き詰まっていますAlternative(そしてMonadPlus、さらに言えば)。

私が抱えている問題:

  • ペディアによると、「Alternative 型クラスは、モノイド構造も持つ Applicative ファンクター用です。」よくわかりません -- オルタナティブとは、モノイドとはまったく違うものを意味するのではないですか? つまり、Alternative 型クラスのポイントは 2 つのものの間で選択することであると理解していましたが、モノイドはものを組み合わせることであると理解していました。

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

  • Alternative 型クラスに Applicative 制約が必要なのはなぜ* -> *ですか? なぜ持っていないの<|> :: a -> a -> aですか?すべてのインスタンスは同じ方法で実装できます...私は(確信が持てません)と思います。モノイドが提供しない価値は何ですか?

  • MonadPlus型クラスのポイントは何ですか? Monad何かを aとの両方として使用するだけで、その良さをすべて解き放つことはできませんAlternativeか? なぜそれを捨てないのですか?(私は間違っていると確信していますが、反例はありません)

願わくば、これらすべての質問が首尾一貫していることを願っています ... !


報奨金の更新: @Antal の回答は素晴らしいスタートですが、Q3 はまだ開いています: Monoid が提供しないオルタナティブは何を提供しますか? この回答は、具体的な例と、Alternative のより高い親切さが Monoid とどのように区別されるかについての具体的な議論がないため、満足のいくものではありません。

Applicative の効果と Monoid の動作を組み合わせる場合は、次のようにしてください。

多くの Monoid インスタンスは Alternative インスタンスとまったく同じであるため、これは私にとってさらに混乱を招きます。

だからこそ、オルタナティブが必要な理由と、それがモノイドとどのように異なるか、または何か異なることを意味するかを示す具体的な例を探しています.

0 投票する
1 に答える
1041 参照

haskell - MonadPlus ではなく、Alternative である Monad の例は何ですか?

Edward Kmettは、 「型クラス、、、および?」の違い</a>に対する彼の回答で、次のように述べています。MonadPlusAlternativeMonoid

さらに、Applicativeが のスーパークラスだったとしても、とにかくMonadそのクラスが必要になることになります。MonadPlus

厳密にはそれを証明するのに十分ではありません

したがって、何かが であると主張することは、MonadPlusそれが であると主張することよりも強力ですAlternative

モナドではないAlternativeアプリカティブ・ファンクターは、自動的にではないan の例になることは明らかですが、エドワード・クメットの答えは、 anであるがaではないモナドMonadPlusが存在することを暗示しています。法律。2 この例を自分で思いつくことはできません。誰か知っていますか?AlternativeMonadPlusempty<|>AlternativeMonadPlus


1一連の法則の正規の参照を見つけることができませんでしたが、「Alternative型クラスの意味と他の型との関係に混乱している」という質問への回答のほぼ半分であると思われるものを並べますクラス」</a> (「右分配性」という語句を検索してください)。私が守らなければならないと信じている4つの法則は次のとおりです。Alternative

  1. 右分配 (の<*>):  (f <|> g) <*> a = (f <*> a) <|> (g <*> a)
  2. 右吸収 ( の場合<*>):  empty <*> a = empty
  3. 左分配係数 (のfmap):  f <$> (a <|> b) = (f <$> a) <|> (f <$> b)
  4. 左吸収 ( の場合fmap):  f <$> empty = empty

Alternativeまた、より有用な一連の法律が与えられることも喜んで受け入れます。

2私は法律が何であるかについて曖昧さがあることMonadPlusを知っています。左分布または左キャッチを使用する答えに満足していますが、前者の方が少し好きです。