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

haskell - この Haskell ADT を Show に派生させるにはどうすればよいですか?

ADT は自由なモナドです:

Show作業中に印刷できるように派生させたいと思います。たとえば、次のような場合:

deriving (Show)現時点では、FreeADTに追加すると次のエラーが発生します。

印刷可能な文字列にしたいと思いshow aaます。これは可能ですか?

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

haskell - 無料のモナドを使用して Redis 呼び出しをテストする

無料のモナドを使用して、Redis リクエストの実行とその使用を分離するために、このブログ投稿をフォローしようとしています。hedis を Redis クライアントとして使用するために提供されたコードに小さな変更を加えましたが、その変更はタイプ チェックのようです。残念ながら、runTest および runRedis 関数の型制約を満たす型クラス インスタンスを見つけることも書き込むこともできず、foo で runTest を呼び出すと次のエラーが発生します。

ストレージ/Types.hs

ストレージ/実装.hs

Main.hs

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

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

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

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

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

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

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

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


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

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

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

haskell - 無料のモナドと GADT を使ったきれいな印刷

次の GADT によって定義された式ファンクターを考えてみましょう。

は次のようにFoo定義されます

(a -> r)フィールド inと (それ以外の場合は望ましい) 制限的な GADT コンストラクターの組み合わせにより、ExprFきれいな印刷インタープリターを作成することが不可能になっているようです。

タイプの穴は、期待されるものです。

継続に必要な型の値を与える方法はないようです。その型は でエンコードされておりf、私が使用している他のインタープリターはすべてf何らかの方法で適切な型の値を抽出します。しかし、String表現への道は閉ざされているようです。

ここで見逃している一般的なイディオムはありますか? Expr実際に可能である場合、 の値をきれいに印刷するにはどうすればよいでしょうか? それが不可能な場合ExprF、同じ構造をキャプチャするだけでなく、きれいなプリンターもサポートする代替構造は何ですか?

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

scala - scalaz の free モナドを使用する際にスタック オーバーフローを回避するには?

私は以前、実装の目標の一部はまさにこの問題を回避することだと思っていたので、明らかにばかげたことをしているのかもしれません。

ここにいくつかのコードがあります:

注:これはばかげていることに気づきました:)実際には、私のコマンドクラスには多くのコマンドがあり、これと同じループを実行するコマンドがあります...基本的に、いくつかの状態をポーリングし、trueの場合は中止し、falseの場合は待機します。

これが引き起こすスタック オーバーフローを回避したい...これはすでにトランポリンされていると思っていましたが、手動でやり直す必要があると思いますか? 自由なモナドの考え方の中でそれを行うためのきれいな方法はありますか?

アップデート:

これについてさらに考えてみると、問題はスリープ Free モナドではなく、評価時にバインドする Id.Id モナドにあると思います。

しかし、これの問題は、1 つのステップしか評価しないことです。理想的には、何らかの条件が満たされるまで runFC をブロックしたいと思います (または、この場合、それを強制終了するまで永遠にループしますが、スタック オーバーフローは発生しません)。

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

haskell - コンポーザブル フリー DSL でのあいまいな型の処理

freeおよびcompdataパッケージを使用して、「free monads」と「datatypes a la carte」に基づいて構成可能な DSL をいくつか構築しています ( Combining Free typesの精神に似ています)。

これはいくつかの単純な DSL では機能しますが、この型パラメーターに依存しないコンストラクター/コマンドの場合、型パラメーターを持つものに行き詰まり、GHC からあいまいな型パラメーターエラーが発生します。

明確にするために、ここにいくつかのコードがあります:

GHC で示唆されているように、 AllowAmbiguousTypes拡張機能を有効にしてこれを機能させようとしても、それ以上はうまくいきませんでした。型シグネチャにforall aスタイルのものをいくつか追加しようとしましたが、役に立ちませんでした。

このパターンを機能させる方法はありますか?

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

haskell - Free モナドに Church エンコーディングを使用するにはどうすればよいですか?

パッケージのFreeデータ型を使用してControl.Monad.Freeいます。free今、私はそれを変換して使用しようとしてFControl.Monad.Free.Churchますが、関数をマップする方法がわかりません。

たとえば、 を使用した単純なパターン マッチング関数Freeは次のようになります。

-とのF間で変換して使用する関数に簡単に変換できます。Free

toFただし、使用せずにそれを実行する方法がわかりませんfromF-

私が見逃している一般的なパターンがあるに違いありません。それを理解するのを手伝ってもらえますか?