問題タブ [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.
haskell - 適用可能なファンクターの構成を介して、短絡障害のある成功のリストをモデル化できますか?
ユーザー「singpolyma」はredditで、基礎となる一般的な構造があるかどうかを尋ねました。
無料のモナドが提案されましたが、これはアプリケーションファンクターを介してより一般的にモデル化できるのではないかと思いました。Abstracting with Applicativesで、Bazermanは、バイアスの方向に自然変換があれば、2つのApplicativeファンクターの合計もApplicativeファンクターであり、左右にバイアスがあることを示しています。これは私たちが必要としているもののように聞こえます!したがって、私は提案を始めましたが、すぐに問題にぶつかりました。誰かがこれらの問題の解決策を見ることができますか?:
まず、2つのファンクターの合計の定義から始めます。ここから始めたのは、成功または成功と失敗の合計タイプをモデル化するためです。
そして、私たちが使用したい2つのファンクターは次のとおりです。
Success
簡単です-それは本質的にConst [a]
です。しかし、Failure e
よくわかりません。pure
定義がないため、これは適用可能なファンクターではありません。ただし、これはApplyのインスタンスです。
次に、これらのファンクターの合計を、右から左への自然変換(つまり左バイアス)で定義できます。
そして今私たちがしなければならない唯一のことは私たちの自然変換を定義することです、そしてこれはそれがすべて崩壊するところです。
を作成できないことFailure
が問題のようです。さらに、ハッキーで⊥を使用することもオプションではありません。これは、を持っている場合に評価されるためInR (Success ...) <*> InL (Failure ...)
です。
何かが足りないような気がしますが、それが何なのかわかりません。
これはできますか?
debugging - Haskell での無限合計のデバッグ
私が関数を持っているとしましょう (それには実用的なアプリケーションはなく、学術的な興味があるだけです。したがって、モノイド、アプリケーション ファンクター、フィックスポイント コンビネーターを使用して、奇妙な書き方をします)
型チェックを行いますが、テストする前に期待どおりの動作をするかどうか確信が持てません。
それをテストおよび/またはデバッグするにはどうすればよいですか? で可能なように、数回繰り返した後に結果を見るようなものですtake 10 [1..]
。
やのghci
ような単純なデバッグ機能については少し知っていますが、非終了計算にステップインするため、何も調べることができません (問題になることさえあります)。また、この関数でfrom moduleを使用する方法もわかりません。:break
:step
^C
trace
Debug
任意のポインタをいただければ幸いです。
haskell - applicatives を使用して、任意の長い一連のアトミック パーサーをどのように連鎖させますか?
このパーサータイプがあるとしましょう:
そして、このアトミック パーサー ユニット:
パーサーは、次の 3 つのインターフェイスを実装します。
私が理解しているように、より高いレベルの抽象化にポップアップしsatisfy
、アプリケーション インターフェイスを使用して連鎖することにより、より複雑なパーサーを構築できるようになりました。例:
これはすばらしいことですが、小文字に遭遇するまでパーサーがストリーム内のすべての大文字を解析するように計算を構築したい場合はどうすればよいでしょうか? 使用事例:
この決定されない長さの概念をどのように表現すればよいでしょうか?
haskell - Control.Applicative での引数の無視
私は xml-conduit パーサーを書いていますが、モナディックよりも適用可能な構文を好みます。結合する引数がたくさんあるので、私は応用的にやや迷子になります。私の現在の問題には8つの引数が与えられています。結果を構築するために4番目と6番目のみを使用したいです。
私がそれを機能させる唯一の方法は次のとおりでした。ただし、フラットなソリューションには星の派手な配置が必要です。
括弧なしのフォームで同じことを行う方法はありますか?
haskell - チョムスキー階層における型クラスと文法レベルの対応
私の質問は、一方で Applicative および Monad 型クラスに関するものであり、他方でチョムスキー階層の文脈自由および文脈依存文法レベルに関するものです。
型クラスと文法レベルは対応していると聞きました。この対応はどの程度正確ですか?
つまり、すべての文脈自由文法は、Applicative コンビネータよりも強力なものを使用して解析できますか? つまり、Applicative 型クラスは文脈自由文法に正確に対応しているのでしょうか。
'context-sensitive' に置き換えられた 'context-free' と Monad による Applicative を除いて、同じ質問です。
報奨金の明確化: 型クラスは文法レベルに対応していますか? たとえば、正規表現言語に必要なすべての操作を提供する型クラスのセットはありますか?
質問の動機は、私がパーサーに取り組んでいて、使用したコンビネーターに基づいて実装がどの文法レベルにあるかを判断したかったことです。これは可能ですか?
haskell - Monad は Applicative に対してどのような利点がありますか?
この記事を読みましたが、最後のセクションが理解できませんでした。
著者は、Monad は文脈依存性を提供すると述べていますが、Applicative インスタンスのみを使用して同じ結果を達成することは可能です。
do 構文がないと確かに醜いですが、それ以外に Monad が必要な理由がわかりません。誰かが私のためにこれをクリアできますか?