問題タブ [applicative]

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 投票する
1 に答える
1778 参照

scala - アプリケーションファンクターは、並列化アルゴリズムとどのように連携しますか?(ScalaとScalaz)

JoshSuerethの「ScalainDepth」から:

「アプリケーションファンクターは、2つの計算を行い、関数を使用してそれらを結合する方法を提供します。トラバース可能な例は、2つのコレクションをペアに並列化する方法を示しています。アプリケーションファンクターと並列処理は、パンとバターのように連携します。」

私はファンクター/モナド/アプリケーション全体について漠然とした考えを持っていますが、それを正確に把握しているわけではありません(モナド全体、ファンクターのものは初めてです)。モナド(flatten、flatMap)とモナドワークフロー、およびファンクター(マップ)の概念を少し理解しています。

それがどのように行われるか、例、および/または「従来の」並列化と比較した場合の利点について、誰かが私のために詳しく説明してもらえますか?

0 投票する
4 に答える
2039 参照

haskell - Haskell Applicative Transformer の例

www.haskell.org の wiki では、Applicative Transformer について次のように説明されています。

では、アプリケーション トランスフォーマーはどこにあるのでしょうか。答えは、アプリカティブ ファンクターは一般的な方法で組み合わせることができるため、特別なトランスフォーマーは必要ないということです。 http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transformers

たくさんのアプリカティブファンクターを組み合わせるために、次のことを試しました。しかし、私が得たのはたくさんのエラーだけでした。コードは次のとおりです。

これにより、多くの型エラーが発生します。部分的には理解できますが、まったく解決できませんでした。

エラーは最後に示します。

たとえば、Maybe Applicative と List Applicative をどのように組み合わせるのですか?

たとえば、State Applicative と List Applicative を組み合わせるにはどうすればよいですか? たとえば、Maybe と List、Maybe と State を組み合わせて、最後にすべての IO と State アプリケーションを組み合わせた例はありますか?

ありがとう。

GHCi エラー メッセージが続きます。

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

haskell - Haskellインスタンスの適用法の証明

Haskellプラットフォームで取得するApplicative型クラスのすべてのHaskellインスタンスは、すべてのApplicative法を満たしていることが証明されていますか?はいの場合、それらの証明はどこにありますか?

Control.Applicativeのソースコードには、さまざまなインスタンスの適用法が適用されるという証拠が含まれていないようです。それはただそれを述べています

次に、コメントに法律を記載します。

他の型クラス(AlternativeとMonad)のインスタンスについても同様のケースを見つけました。

これらの図書館の利用者は、これらの法律を自分で確認することになっていますか?

しかし、私はこれらの法律の厳格な証拠が開発者によって他の場所で与えられたのかどうか疑問に思いましたか?

繰り返しになりますが、IO MonadのApplicate(またはMonad)法の厳密な証明には、一般に、外部との会話が含まれるため、非常に複雑になる可能性があることを認識しています。

ありがとう。

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

haskell - 中置演算子の適用スタイル?

中置演算子を扱うときに、アプリケーションを使用して見栄えを良くする方法はあり<$>ます<*>か?私はそれを思います

ずっと散らかっているように見えます

だからもっといい方法があるのか​​しら。

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

haskell - パーセクと応用的なスタイル

Applicative スタイルを使用して Parsec パーサーを作成する方法を理解するのを手伝ってくれる人はいますか? これは私が持っているコードです:

しかし、コンパイルしようとすると、次のようになります。

アイデアは、cmdParse2にcmdParseと同じことをさせたいということですが、応用的なものを使用しています...私のアプローチはおそらく完全に間違っています.haskellは初めてです

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を知っています。左分布または左キャッチを使用する答えに満足していますが、前者の方が少し好きです。

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

parsing - Monad を想定せずにパーサーの Applicative インスタンスを実装するにはどうすればよいですか?

Applicativeこのパーサーのインスタンスを実装する方法がわかりません:

想定せずにMonad m。インスタンスは を想定するだけApplicative mでよいので、を想定するだけでよいと思っていました。私は最終的に次のようになりました:FunctorFunctor m

どうすればいいですか?for を手で代用しよう>>=としましたが、 a -- を減らそうとしていつも行き詰まりました。joinこれには も必要ですMonad

Parsecにも相談しましたが、それでもあまり役に立ちませんでした。

この質問をする理由は、純粋に独学です。

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

haskell - 適用可能なファンクターとモナドの間の同等性

モナドは適用可能なファンクターの拡張であると人々は言いますが、私にはわかりません。適用可能なファンクターの例を見てみましょう。(<*>) :: f(a->b) -> f a -> f b

これで、モナドと同じことができると思います。つまり、コンテキストに関数が含まれているコンテキストと、コンテキストを取得するための別のコンテキストの2つのパラメーターを適用できるということです。しかし、モナドの場合、私はできません。必要なのは、次のような醜い関数を書くことだけです。

[(+3)]はい、もちろん、それはと同等であると言うことができます[\x->(x+3)]。しかし、少なくとも、この関数はコンテキスト内にあります。

最後に、ここでは同等性や拡張性はわかりません。モナドは別のスタイルであり、別の話で役立ちます。

私の無知でごめんなさい。

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

haskell - 「組み合わせる」のではなく、実際に適用することについて、どの程度適用可能ですか?

確実性が伝播するApproximatetypeFunctorの場合、 throughのインスタンスが必要Monadです。ただし、含まれている型にベクトル空間構造が必要なため、これは機能しません。実際には、クラスの制限されたバージョンである必要があります。それらの標準ライブラリはまだないようです(またはありますか?私を指摘してください。rmonadがありますが、それはコンテキストの種類としてでは*なく使用されます。これは私には時代遅れのようです)、私は独自のバージョンを作成しました当分の間。Constraint

それはすべて簡単に機能しますFunctor

の直訳ですがApplicative、のように

関数a->bには必要なベクトル空間構造* がないため、不可能FScalarBasisSpaceです。

ただし、機能するのは、制限された適用クラスの定義を変更することです。

そして、自由な関数として<*>#ではなく定義するcliftA2

メソッドの代わりに。制約がなければ、それは完全に同等です (実際、とにかく多くのApplicativeインスタンスがこのようになります)。しかし、この場合は実際にはより良いです:満たすことができない(<*>#)制約がまだありますが、それは適用可能なインスタンスを傷つけることはありません。次のような便利なことはまだできますa->bApproximate

たとえば、制約の種類に関する元のブログ投稿で既に示されている例などCApplicative、の他の多くの用途でも状況は本質的に同じであると思います。Set

だから私の質問:

より<*>も基本的なものliftA2ですか?

繰り返しますが、制約のない場合、それらはとにかく同等です。実際にはliftA2理解しやすいと思いますが、Haskellでは、オブジェクトのコンテナとそれらを結合するための「グローバル」操作ではなく、「関数のコンテナ」を渡すことを考える方がおそらく自然です。そして、 だけでなく、すべてのμ ∊ ℕを<*>直接誘導します。だけからそれを行うことは、実際には機能しませんliftAμliftA2liftA2

しかし、これらの制約されたクラスは、liftA2. 特に、CApplicativeすべての のインスタンスを許可しますが、 がベース メソッドの場合はCMonad機能しません。そして、は常に よりも一般的であるべきである<*>#ことに、私たちは皆同意していると思います。ApplicativeMonad

圏論者はこれらすべてについて何と言うでしょうか? また、関連する制約を満たす必要liftAμなく一般的なものを取得する方法はありますか?a->b


*そのタイプの線形関数は、実際にはベクトル空間構造を持っていますが、それらに限定することはできません。

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

haskell - Applicative関手とどちらかからの左

私はすばらしい本を読み進めてきましたが、Applicative Functor には少し苦労しています。

次の例maxでは、2 つの Maybe ファンクターと return の内容に適用されますJust 6

以下の例ではLeft "Hello"、Either ファンクターの内容の代わりに が返されるのはなぜLeft "Hello World"ですか?