問題タブ [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.
scala - アプリケーションファンクターは、並列化アルゴリズムとどのように連携しますか?(ScalaとScalaz)
JoshSuerethの「ScalainDepth」から:
「アプリケーションファンクターは、2つの計算を行い、関数を使用してそれらを結合する方法を提供します。トラバース可能な例は、2つのコレクションをペアに並列化する方法を示しています。アプリケーションファンクターと並列処理は、パンとバターのように連携します。」
私はファンクター/モナド/アプリケーション全体について漠然とした考えを持っていますが、それを正確に把握しているわけではありません(モナド全体、ファンクターのものは初めてです)。モナド(flatten、flatMap)とモナドワークフロー、およびファンクター(マップ)の概念を少し理解しています。
それがどのように行われるか、例、および/または「従来の」並列化と比較した場合の利点について、誰かが私のために詳しく説明してもらえますか?
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 エラー メッセージが続きます。
haskell - Haskellインスタンスの適用法の証明
Haskellプラットフォームで取得するApplicative型クラスのすべてのHaskellインスタンスは、すべてのApplicative法を満たしていることが証明されていますか?はいの場合、それらの証明はどこにありますか?
Control.Applicativeのソースコードには、さまざまなインスタンスの適用法が適用されるという証拠が含まれていないようです。それはただそれを述べています
次に、コメントに法律を記載します。
他の型クラス(AlternativeとMonad)のインスタンスについても同様のケースを見つけました。
これらの図書館の利用者は、これらの法律を自分で確認することになっていますか?
しかし、私はこれらの法律の厳格な証拠が開発者によって他の場所で与えられたのかどうか疑問に思いましたか?
繰り返しになりますが、IO MonadのApplicate(またはMonad)法の厳密な証明には、一般に、外部との会話が含まれるため、非常に複雑になる可能性があることを認識しています。
ありがとう。
haskell - 中置演算子の適用スタイル?
中置演算子を扱うときに、アプリケーションを使用して見栄えを良くする方法はあり<$>
ます<*>
か?私はそれを思います
ずっと散らかっているように見えます
だからもっといい方法があるのかしら。
haskell - パーセクと応用的なスタイル
Applicative スタイルを使用して Parsec パーサーを作成する方法を理解するのを手伝ってくれる人はいますか? これは私が持っているコードです:
しかし、コンパイルしようとすると、次のようになります。
アイデアは、cmdParse2にcmdParseと同じことをさせたいということですが、応用的なものを使用しています...私のアプローチはおそらく完全に間違っています.haskellは初めてです
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
を知っています。左分布または左キャッチを使用する答えに満足していますが、前者の方が少し好きです。
parsing - Monad を想定せずにパーサーの Applicative インスタンスを実装するにはどうすればよいですか?
Applicative
このパーサーのインスタンスを実装する方法がわかりません:
想定せずにMonad m
。インスタンスは を想定するだけApplicative m
でよいので、を想定するだけでよいと思っていました。私は最終的に次のようになりました:Functor
Functor m
どうすればいいですか?for を手で代用しよう>>=
としましたが、 a -- を減らそうとしていつも行き詰まりました。join
これには も必要ですMonad
。
Parsecにも相談しましたが、それでもあまり役に立ちませんでした。
この質問をする理由は、純粋に独学です。
haskell - 適用可能なファンクターとモナドの間の同等性
モナドは適用可能なファンクターの拡張であると人々は言いますが、私にはわかりません。適用可能なファンクターの例を見てみましょう。(<*>) :: f(a->b) -> f a -> f b
これで、モナドと同じことができると思います。つまり、コンテキストに関数が含まれているコンテキストと、コンテキストを取得するための別のコンテキストの2つのパラメーターを適用できるということです。しかし、モナドの場合、私はできません。必要なのは、次のような醜い関数を書くことだけです。
[(+3)]
はい、もちろん、それはと同等であると言うことができます[\x->(x+3)]
。しかし、少なくとも、この関数はコンテキスト内にあります。
最後に、ここでは同等性や拡張性はわかりません。モナドは別のスタイルであり、別の話で役立ちます。
私の無知でごめんなさい。
haskell - 「組み合わせる」のではなく、実際に適用することについて、どの程度適用可能ですか?
不確実性が伝播するApproximate
typeFunctor
の場合、 throughのインスタンスが必要Monad
です。ただし、含まれている型にベクトル空間構造が必要なため、これは機能しません。実際には、クラスの制限されたバージョンである必要があります。それらの標準ライブラリはまだないようです(またはありますか?私を指摘してください。rmonadがありますが、それはコンテキストの種類としてでは*
なく使用されます。これは私には時代遅れのようです)、私は独自のバージョンを作成しました当分の間。Constraint
それはすべて簡単に機能しますFunctor
の直訳ですがApplicative
、のように
関数a->b
には必要なベクトル空間構造* がないため、不可能FScalarBasisSpace
です。
ただし、機能するのは、制限された適用クラスの定義を変更することです。
そして、自由な関数として<*>#
ではなく定義するcliftA2
メソッドの代わりに。制約がなければ、それは完全に同等です (実際、とにかく多くのApplicative
インスタンスがこのようになります)。しかし、この場合は実際にはより良いです:満たすことができない(<*>#)
制約がまだありますが、それは適用可能なインスタンスを傷つけることはありません。次のような便利なことはまだできますa->b
Approximate
たとえば、制約の種類に関する元のブログ投稿で既に示されている例などCApplicative
、の他の多くの用途でも状況は本質的に同じであると思います。Set
だから私の質問:
より<*>
も基本的なものliftA2
ですか?
繰り返しますが、制約のない場合、それらはとにかく同等です。実際にはliftA2
理解しやすいと思いますが、Haskellでは、オブジェクトのコンテナとそれらを結合するための「グローバル」操作ではなく、「関数のコンテナ」を渡すことを考える方がおそらく自然です。そして、 だけでなく、すべてのμ ∊ ℕを<*>
直接誘導します。だけからそれを行うことは、実際には機能しません。liftAμ
liftA2
liftA2
しかし、これらの制約されたクラスは、liftA2
. 特に、CApplicative
すべての のインスタンスを許可しますが、 がベース メソッドの場合はCMonad
機能しません。そして、は常に よりも一般的であるべきである<*>#
ことに、私たちは皆同意していると思います。Applicative
Monad
圏論者はこれらすべてについて何と言うでしょうか? また、関連する制約を満たす必要liftAμ
なく一般的なものを取得する方法はありますか?a->b
*そのタイプの線形関数は、実際にはベクトル空間構造を持っていますが、それらに限定することはできません。
haskell - Applicative関手とどちらかからの左
私はすばらしい本を読み進めてきましたが、Applicative Functor には少し苦労しています。
次の例max
では、2 つの Maybe ファンクターと return の内容に適用されますJust 6
。
以下の例ではLeft "Hello"
、Either ファンクターの内容の代わりに が返されるのはなぜLeft "Hello World"
ですか?