問題タブ [free-monad]

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 に答える
1977 参照

haskell - フリーモナドの可視化

フリーモナドが何であるかについては大まかな考えがあると思いますが、それを視覚化するためのより良い方法が欲しいです。

自由なマグマが単なる二分木であることは理にかなっています。なぜなら、それは情報を失うことなく可能な限り「一般的」だからです。

同様に、操作の順序は重要ではないため、自由モノイドが単なるリストであることは理にかなっています。「二分木」には冗長性があるため、それが理にかなっている場合は、単純に平坦化できます。

同様の理由で、フリー グループがフラクタルのように見えることは理にかなっています: https://en.wikipedia.org/wiki/Cayley_graph#/media/File:Cayley_graph_of_F2.svg 他のグループを取得するには、さまざまな要素を識別するだけです。グループを「同じ」と見なし、他のグループを取得します。

フリーモナドをどのように視覚化すればよいですか? 現時点では、想像できる最も一般的な抽象構文ツリーと考えています。それは本質的にそれですか?それとも私はそれを単純化しすぎていますか?

また、同様に、自由なモナドからリストや他のモナドに移行する際に、何を失うのでしょうか? 私たちは何を「同じ」と認識していますか?

これに光を当てるすべてのコメントに感謝します。ありがとう!

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

scala - Action から Future への解釈に Free モナドが必要な理由

Action を Future にマップするために scalaz.Free を使用する例を 1 つ書きました。しかし、私はその利点を理解しようとしています。ここで答えが得られることを願っています。ここに私のコードスニペットがあります

まず、AST であるアクションを作成します。

次に、Scalaz Free と Coyonda を使用して Action を ASTMonad にマップするクラスを作成します。

最後に、Action を Future に解釈する Interpreter を作成します。

実行すると、使用できます

それは機能しているようで、このモナドとインタープリターのことを理解していると思います。ただし、 Future.flatmapmapを直接使用している場合、ソリューションと比較してどのような利点があると考えていますか?

Future flatmap と map を使用するコードは、私には単純に見えます。私の質問に戻りますが、Future はすでに flatMap と map を提供しているので、Free モナドを使用してビジネス ロジックを Future に解釈する必要がありますか。もしそうなら、誰かが私にもっと具体的な例を教えてくれるので、その利点を見ることができますか?

前もって感謝します

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

haskell - フリーモナドの出力

フリーモナドを他のモナドに変換することはできますが、 type の値が与えられた場合、Free f x生成された AST のすべてのノードを別のモナドの他のノードにマップするのではなく、ツリー全体を出力したいと考えています。

Gabriel Gonzales値を直接使用します

これは次のように抽象化できます

Choice x = Choice x x(ファンクターとして使用する)のような多相関数がある場合、これは簡単に呼び出すことができます

しかし、それは単純な操作にはかなり複雑に思えます... から に移行するには、他にどのようなアプローチがありますf x -> bFree f x -> b ?

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

haskell - フリー (またはフリー) モナドでモナド引数を取るアクションをエンコードする方法は?

ほとんどのモナド関数は純粋な引数を取り、モナド値を返します。ただし、モナド引数も必要なものがいくつかあります。たとえば、次のようになります。

それらのそれぞれが異なる問題を引き起こしているようで、フリーモナドを使用してそのようなアクションをエンコードする一般的な方法を把握できません。

  • 両方finallyforkIO問題は、モナド引数が結果とは異なる型であることです。しかし、無料の場合は、のみをエンコードするIO aのようなエンコーディング タイプの型変数に置き換えられるため、それらが同じタイプである必要があります。data MyFunctor x = Finally x x xIO a -> IO a -> IO a

    著者が最初に実装するために使用するHaskellコードの 33 行のゼロから協調スレッドへFork next next

    そして、それを使用して実装します

    入力と出力の型が異なります。しかし、これが何らかのプロセスを使用して導き出されたものなのか、それともこの特定の目的のために機能するアドホックなアイデアなのかはわかりません。

  • mplus特に紛らわしい: 単純なエンコーディング

    配布され>>=提案されたより良い実装はより複雑です。また、 free のネイティブ実装が freeからMonadPlus 削除されました

    freerでは、追加することで実装されます

    MPlus NonDetEff Boolの代わりにあるのはなぜNonDetEff a aですか?CoYoneda functorFreeを使用する以外に、データ型を functor にする必要がある で動作させる方法はありますか?

  • forkExecどうやって進めばいいのかわからないからです。
0 投票する
1 に答える
96 参照

monads - Free モナドは教会の数字ですか?

コメンテーターは最近次のように述べました

無料のモナドは教会の数字です -- 関数の代わりに (endo-) ファンクタを使っているだけです!

彼は続けてこのことわざを次のように説明しています。

それらは両方とも 0 - n 回構成された endfunction(ion|or) です

Church Numerals は、数値ごとに 1 つの構成を持つ無名関数構成のセットであることがわかります。それがFree Monadsにどのように適用されるのかわかりません。

私の質問は: Free モナドは教会の数字ですか?

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

haskell - フリーモナドは常に存在するのか?

圏論から、 Setのすべての endfunctor が自由なモナドを認めているわけではないことがわかっています。標準的な反例はべき集合関数です。

しかし、Haskell は任意のファンクターを自由なモナドに変えることができます。

この構築が Haskell ファンクターで機能するのに、Setでは機能しない理由は何ですか?

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

haskell - Purescript でフリー モナドを操作する

「ビュー」データ構造と関連する演算子などControl.Monad.Freeを非表示にするのはなぜですか?purescript-freeFreeViewtoView

Free モナドの通常の定式化では -

そして、次のような Functor が与えられた -

チェーン化された PutStrLn 呼び出しを次のように折りたたむ単純な (醜い) コードをいくつか書くことができます -

実際のデータ コンストラクターを使用せずに、collapseChainedPurescript の によってエクスポートされた関数を使用することと同等のことは可能ですか?Control.Monad.Free