問題タブ [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.
haskell - フリーモナドの可視化
フリーモナドが何であるかについては大まかな考えがあると思いますが、それを視覚化するためのより良い方法が欲しいです。
自由なマグマが単なる二分木であることは理にかなっています。なぜなら、それは情報を失うことなく可能な限り「一般的」だからです。
同様に、操作の順序は重要ではないため、自由モノイドが単なるリストであることは理にかなっています。「二分木」には冗長性があるため、それが理にかなっている場合は、単純に平坦化できます。
同様の理由で、フリー グループがフラクタルのように見えることは理にかなっています: https://en.wikipedia.org/wiki/Cayley_graph#/media/File:Cayley_graph_of_F2.svg 他のグループを取得するには、さまざまな要素を識別するだけです。グループを「同じ」と見なし、他のグループを取得します。
フリーモナドをどのように視覚化すればよいですか? 現時点では、想像できる最も一般的な抽象構文ツリーと考えています。それは本質的にそれですか?それとも私はそれを単純化しすぎていますか?
また、同様に、自由なモナドからリストや他のモナドに移行する際に、何を失うのでしょうか? 私たちは何を「同じ」と認識していますか?
これに光を当てるすべてのコメントに感謝します。ありがとう!
scala - Action から Future への解釈に Free モナドが必要な理由
Action を Future にマップするために scalaz.Free を使用する例を 1 つ書きました。しかし、私はその利点を理解しようとしています。ここで答えが得られることを願っています。ここに私のコードスニペットがあります
まず、AST であるアクションを作成します。
次に、Scalaz Free と Coyonda を使用して Action を ASTMonad にマップするクラスを作成します。
最後に、Action を Future に解釈する Interpreter を作成します。
実行すると、使用できます
それは機能しているようで、このモナドとインタープリターのことを理解していると思います。ただし、 Future.flatmapとmapを直接使用している場合、ソリューションと比較してどのような利点があると考えていますか?
Future flatmap と map を使用するコードは、私には単純に見えます。私の質問に戻りますが、Future はすでに flatMap と map を提供しているので、Free モナドを使用してビジネス ロジックを Future に解釈する必要がありますか。もしそうなら、誰かが私にもっと具体的な例を教えてくれるので、その利点を見ることができますか?
前もって感謝します
haskell - フリーモナドの出力
フリーモナドを他のモナドに変換することはできますが、 type の値が与えられた場合、Free f x
生成された AST のすべてのノードを別のモナドの他のノードにマップするのではなく、ツリー全体を出力したいと考えています。
Gabriel Gonzalesは値を直接使用します
これは次のように抽象化できます
Choice x = Choice x x
(ファンクターとして使用する)のような多相関数がある場合、これは簡単に呼び出すことができます
しかし、それは単純な操作にはかなり複雑に思えます... から に移行するには、他にどのようなアプローチがありますf x -> b
かFree f x -> b
?
haskell - フリー (またはフリー) モナドでモナド引数を取るアクションをエンコードする方法は?
ほとんどのモナド関数は純粋な引数を取り、モナド値を返します。ただし、モナド引数も必要なものがいくつかあります。たとえば、次のようになります。
それらのそれぞれが異なる問題を引き起こしているようで、フリーモナドを使用してそのようなアクションをエンコードする一般的な方法を把握できません。
両方
finally
のforkIO
問題は、モナド引数が結果とは異なる型であることです。しかし、無料の場合は、のみをエンコードするIO a
のようなエンコーディング タイプの型変数に置き換えられるため、それらが同じタイプである必要があります。data MyFunctor x = Finally x x x
IO 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
どうやって進めばいいのかわからないからです。
monads - Free モナドは教会の数字ですか?
コメンテーターは最近次のように述べました。
無料のモナドは教会の数字です -- 関数の代わりに (endo-) ファンクタを使っているだけです!
彼は続けてこのことわざを次のように説明しています。
それらは両方とも 0 - n 回構成された endfunction(ion|or) です
Church Numerals は、数値ごとに 1 つの構成を持つ無名関数構成のセットであることがわかります。それがFree Monadsにどのように適用されるのかわかりません。
私の質問は: Free モナドは教会の数字ですか?
haskell - フリーモナドは常に存在するのか?
圏論から、 Setのすべての endfunctor が自由なモナドを認めているわけではないことがわかっています。標準的な反例はべき集合関数です。
しかし、Haskell は任意のファンクターを自由なモナドに変えることができます。
この構築が Haskell ファンクターで機能するのに、Setでは機能しない理由は何ですか?
haskell - Purescript でフリー モナドを操作する
「ビュー」データ構造と関連する演算子などControl.Monad.Free
を非表示にするのはなぜですか?purescript-free
FreeView
toView
Free モナドの通常の定式化では -
そして、次のような Functor が与えられた -
チェーン化された PutStrLn 呼び出しを次のように折りたたむ単純な (醜い) コードをいくつか書くことができます -
実際のデータ コンストラクターを使用せずに、collapseChained
Purescript の によってエクスポートされた関数を使用することと同等のことは可能ですか?Control.Monad.Free