問題タブ [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 に答える
224 参照

regex - Applicative Functor を使用して 3 つの Scala 正規表現のうち少なくとも 1 つを照合する

3 つの Scala 正規表現があり、それらのいずれかが特定の文字列に一致するかどうかをテストする必要があります。

私は次のことができることを知っています:

しかし、 Scalazライブラリの Applicative Functor または Monad を使用してこれを行う方法があると思います。

これはどのように行うことができますか?

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

haskell - Control.Applicative.Lift は何に役立ちますか?

transformers最近のブログ投稿で、「人々は何のために Control.Applicative.Lift を使用するのですか?」と尋ねた人がいまし。私はこれに答えることができなかったので、質問を StackOverflow にエコーします - 何 Control.Applicative.Lift使用されますか?

パッケージに使用例が 1 つありますが、その機能を完全に解析できるわけではないようです。野生の他の例を知っている人はいますか?

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

haskell - 2つの引数を持つコンストラクターの適用可能なスタイルパーサー

山かっこでコンマ区切りの値のペアのパーサーを記述したいと思います。私はそれを次のアプローチで動作させることができました:

ただし、Fooコンストラクターでは、タプルではなく2つのパラメーターを使用することをお勧めします。

そのようなパーサーを書くための最良の方法は何ですか?理想的には、このような標準のパーセクパーセクを再利用anglesし、可能な限りアプリケーションを使用したいと思います。

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

haskell - Haskellフィルターの作成

zxcvbnパスワード強度アルゴリズムをHaskellに変換しています。

すべての文字がASCIIであるかどうかをチェックし、ブルートフォース攻撃が可能であることを確認する2つの関数があります。

これらを1つの関数に構成しました。

用語がnullでないかどうかを確認するために、3番目のフィルターでこれらを作成する必要があります。

私はフィルターのチェーンを作成していることに気づきました。フィルター関数のリストを取得し、指定された順序でそれらを構成する単一の関数を作成する方が理にかなっています。

読んだことを思い出すと、これは応用ファンクターの仕事だと思います。これにApplicativeを使用できますか?

フィルタリングする前に、1つのベースのインデックスを持つ各アイテムを処理するfilterShort必要がある関数を処理する方法がわかりません。zip

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

haskell - Haskell-Applicativeの場合、効果の順序は決定論的ですか?

で定義されたIOアクションを実行する場合someFun <$> (a :: IO ()) <$> (b :: IO ())aおよびbアクションの実行は順序付けられていますか?つまり、a以前に実行されたものを信頼できbますか?

GHCの場合、IOがStateを使用して実装されていることがわかります。またこれがApplicativeインスタンスであることがわかりますが、実際のインスタンス宣言のソースが見つかりません。Stateを通じて実装されるということは、さまざまなIO効果を連続させる必要があることを示唆していますが、それらの順序を定義する必要はありません。

GHCiで遊んでみると、Appliativeは効果の順序を保持しているように見えますが、それは普遍的な保証ですか、それともGHC固有ですか?詳細に興味があります。

ありがとう!

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

haskell - getZipList はどのように定義されていますか?

getZipList が ghc のどこで定義されているか知りたいです。Control.Applicative には、ZipList のこの定義があります。

ZipLists を使用する 1 つの方法は (LYAH から):

getZipList が何を返すかをどのように知っているのか興味があります。おそらく、newtype キーワードについて何かが欠けているのでしょう。ありがとう!

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

haskell - applicative functor には副作用があるのに、functor にはできないのはなぜですか?

この質問をするのはばかげている気がしますが、しばらく頭に浮かんでいて、答えが見つかりません。

問題は、なぜアプリケーション ファンクターには副作用があるのに、ファンクターにはできないのかということです。

たぶん、彼らはできるのに、私は気づいていません...?

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

haskell - attoparsecを使用して固定長テキストを解析します

attoparsecを使用して固定長フィールドを解析する必要がありますが、コンパイラーで苦労しています。私はまだ初心者です、以下のコードは私が持っている最も近い解決策です:

これはすべて素晴らしいですが、スペースのない都市を返すだけです。

市のテキスト文字列に20文字を使用するためにapplicativeを使用してみました

そしてさえdo syntax

しかし、どちらのアプローチもこのエラーでコンパイルに失敗します。

がタイプを持っているText -> Textときにghcが要求する原因は何ですか?takeInt -> Text -> Text

アプリケーションと構文の両方でそれを解決するにはどうすればよいですか?

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

haskell - モナドからアプリカティブへの変換

わかりました。Applicative型クラスに含まれるものと、それがなぜ役立つかはわかりました。しかし、重要な例でそれをどのように使用するかについて、頭を悩ませることはできません。

たとえば、次のかなり単純な Parsec パーサーを考えてみましょう。

Monadのインスタンスを使用せずに、一体どのように記述しますParserか? 多くの人がこれを行うことができ、良いアイデアだと主張していますが、どのように正確に理解することはできません.

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

haskell - 適用可能なファンクターでもっと楽しく

以前、Parsecの適用可能なファンクターインスタンスのみを使用するようにモナディックコードを変換することについて質問しました。残念ながら、私は文字通り尋ねた質問に答えるいくつかの返信を受け取りましたが、実際には多くの洞察を与えませんでした。では、もう一度試してみましょう...

これまでの私の知識を要約すると、適用可能なファンクターは、モナドよりもいくらか制限されているものです。「少ないほど多い」という伝統では、コードが実行できることを制限すると、狂ったコード操作の可能性が高まります。とにかく、多くの人は、モナドの代わりにアプリケーションを使用することが、可能な場合は優れたソリューションであると信じているようです。

Applicativeクラスはで定義されています。Control.ApplicativeそのHaddockのリストは、クラスメソッドとユーティリティ関数をそれらの間にある膨大な数のクラスインスタンスでうまく分離し、画面上のすべてを一度にすばやく表示することを困難にします。しかし、適切な型署名は

完全に理にかなっていますよね?

さて、Functorすでに私たちに与えますfmap、それは基本的に<$>です。xつまり、からへの関数が与えられた場合、yをにマップすることができf xますf yApplicative2つの本質的に新しい要素を追加します。1つはpure、とほぼ同じタイプですreturn(およびさまざまな圏論クラスの他のいくつかの演算子)。もう1つは<*>、関数のコンテナーと入力のコンテナーを取得して、出力のコンテナーを生成する機能を提供するです。

上記の演算子を使用すると、次のようなことを非常にうまく行うことができます

これにより、N-ary関数を取得し、任意のNに簡単に一般化できる方法でN個のファンクターからその引数を取得できます。


これだけ私はすでに理解しています。私がまだ理解していない2つの主要なことがあります。

まず、関数*>、、<*および<$。それらのタイプから、、、<* = constおよび*> = flip const<$類似したものである可能性があります。おそらく、これはこれらの関数が実際に何をするかを説明していません。(??!)

次に、Parsecパーサーを作成する場合、通常、各解析可能エンティティは次のようになります。

アプリケーションファンクターでは、このように中間結果を変数にバインドできないため、最終段階でそれらを収集する方法に戸惑います。これを行う方法を理解するのに十分なほど、アイデアに頭を悩ませることはできませんでした。