問題タブ [monadfix]

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

haskell - Monad のインスタンスはありますが、MonadFix のインスタンスはありませんか?

質問は主にタイトルにあります。mfix発散する可能性がありますが、どのモナド計算でも定義できるようです。

この構造の何が問題なのですか?また、 と の型クラスが分かれているのはなぜMonadですかMonadFix(つまり、どの型が のインスタンスを持ち、 のインスタンスをMonad持たないのMonadFixですか)?

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

haskell - 継続モナドの MonadFix のインスタンスが存在できないのはなぜですか?

継続モナドに有効な のインスタンスがないことをどのように証明できますMonadFixか?

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

haskell - FreeT によって生成されたインタープリター モナド トランスフォーマーの MonadFix インスタンス?

によって生成された標準のインタープリターモナドトランスフォーマーの簡略化されたバージョンがありますFreeT

pは「プロンプト」でありr、「環境」です...次のようなものを使用してこれを実行します:

このタイプは多かれ少なかれ...の制約されたバージョンにすぎないように感じStateTます...どちらかといえば...Interactive p r IOの制約されたバージョンだIOと思います...私は思う...しかし...まあ、いずれにせよ、私の直感はそれを言います良い例があるはずです。

書いてみましたが、よくわかりません。これまでの私の最も近い試みは次のとおりです。

MonadFixのインスタンスを利用したバージョンも試してみましたmが、うまくいきませんでした -

これが本当に可能かどうか、または不可能な理由を知っている人はいますか? もしそうなら、私が探し続けるのに適した場所はどこですか?


あるいは、私の実際のアプリケーションでは、実際に使用する必要さえありませんFreeT...使用するだけFreeです。つまり、Interactiveただのモナド変換子ではなく、ただのモナドであり、

一般的な FreeT のケースではなく、このケースで何かが可能であれば、私も嬉しいです:)

0 投票する
0 に答える
325 参照

haskell - ラムダ式のチルダの意味は何ですか?

この本の 7 ページにあるtoggle. チルダの意味は?

ここに画像の説明を入力

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

list - [] の MonadFix インスタンス

インスタンスは次のように定義されます。

[]しかし、非決定論的計算と見なされるモナドに関して、その背後にある直感的な意味を把握できていません。In mfix ffunctionfはその引数で厳密であってはならないため、引数を調べることができません。また、定義によれば、出力のどこでも引数を使用することはできません。そうしないと、ある時点でヒットfix (f . head)して発散します。mfixでは、 for リスト以外の用途 (または良い例) はありますmfix (const someList)か?

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

haskell - Haskell の RecursiveDo で生成された複製 EDSL コード

-O2 フラグでコンパイルされた ghc v8.0.1 を使用。

RecursiveDo (mdo) に問題があります。同じ出力を生成するわずかに異なる関数が 2 つありますが、そうではありません。

次の関数は正しい出力を生成します。

正しい出力は

次の関数は、正しくない出力を生成します。

間違った出力は

0007 から 000A までの行は 0003 から 0006 までの行の複製であり、(この特定のケースでは) 最終結果は 0007 での無限ループです。

問題のコードは、Haskell で EDSL (Ting Pen のアセンブラー) を実装しています。プログラムの出力は、Ting Pen のマシン コードです。

アセンブリ言語で前方ラベルをキャプチャできるように MonadFix を使用していますが、コード コンビネータを使用すると、正しくない出力が得られます (生成されたコードの一部が複製されます)。いくつかのトレース コードを含めて、コード生成をトレースすることができます。RecursiveDo メカニズムが重複コードを生成する何かを実行するポイントがあります (以下に示すプログラムの出力も参照してください)。

プログラムの出力は次のとおりです。

proc1 からの誤った出力:

これは、コードの重複が発生する場所です。

proc2 からの正しい出力: