問題タブ [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 - この Haskell ADT を Show に派生させるにはどうすればよいですか?
ADT は自由なモナドです:
Show
作業中に印刷できるように派生させたいと思います。たとえば、次のような場合:
deriving (Show)
現時点では、Free
ADTに追加すると次のエラーが発生します。
印刷可能な文字列にしたいと思いshow aa
ます。これは可能ですか?
haskell - 無料のモナドを使用して Redis 呼び出しをテストする
無料のモナドを使用して、Redis リクエストの実行とその使用を分離するために、このブログ投稿をフォローしようとしています。hedis を Redis クライアントとして使用するために提供されたコードに小さな変更を加えましたが、その変更はタイプ チェックのようです。残念ながら、runTest および runRedis 関数の型制約を満たす型クラス インスタンスを見つけることも書き込むこともできず、foo で runTest を呼び出すと次のエラーが発生します。
ストレージ/Types.hs
ストレージ/実装.hs
Main.hs
haskell - FreeT によって生成されたインタープリター モナド トランスフォーマーの MonadFix インスタンス?
によって生成された標準のインタープリターモナドトランスフォーマーの簡略化されたバージョンがありますFreeT
。
p
は「プロンプト」でありr
、「環境」です...次のようなものを使用してこれを実行します:
このタイプは多かれ少なかれ...の制約されたバージョンにすぎないように感じStateT
ます...どちらかといえば...Interactive p r IO
の制約されたバージョンだIO
と思います...私は思う...しかし...まあ、いずれにせよ、私の直感はそれを言います良い例があるはずです。
書いてみましたが、よくわかりません。これまでの私の最も近い試みは次のとおりです。
MonadFix
のインスタンスを利用したバージョンも試してみましたm
が、うまくいきませんでした -
これが本当に可能かどうか、または不可能な理由を知っている人はいますか? もしそうなら、私が探し続けるのに適した場所はどこですか?
あるいは、私の実際のアプリケーションでは、実際に使用する必要さえありませんFreeT
...使用するだけFree
です。つまり、Interactive
ただのモナド変換子ではなく、ただのモナドであり、
一般的な FreeT のケースではなく、このケースで何かが可能であれば、私も嬉しいです:)
haskell - 無料のモナドと GADT を使ったきれいな印刷
次の GADT によって定義された式ファンクターを考えてみましょう。
は次のようにFoo
定義されます
(a -> r)
フィールド inと (それ以外の場合は望ましい) 制限的な GADT コンストラクターの組み合わせにより、ExprF
きれいな印刷インタープリターを作成することが不可能になっているようです。
タイプの穴は、期待されるものです。
継続に必要な型の値を与える方法はないようです。その型は でエンコードされておりf
、私が使用している他のインタープリターはすべてf
何らかの方法で適切な型の値を抽出します。しかし、String
表現への道は閉ざされているようです。
ここで見逃している一般的なイディオムはありますか? Expr
実際に可能である場合、 の値をきれいに印刷するにはどうすればよいでしょうか? それが不可能な場合ExprF
、同じ構造をキャプチャするだけでなく、きれいなプリンターもサポートする代替構造は何ですか?
scala - scalaz の free モナドを使用する際にスタック オーバーフローを回避するには?
私は以前、実装の目標の一部はまさにこの問題を回避することだと思っていたので、明らかにばかげたことをしているのかもしれません。
ここにいくつかのコードがあります:
注:これはばかげていることに気づきました:)実際には、私のコマンドクラスには多くのコマンドがあり、これと同じループを実行するコマンドがあります...基本的に、いくつかの状態をポーリングし、trueの場合は中止し、falseの場合は待機します。
これが引き起こすスタック オーバーフローを回避したい...これはすでにトランポリンされていると思っていましたが、手動でやり直す必要があると思いますか? 自由なモナドの考え方の中でそれを行うためのきれいな方法はありますか?
アップデート:
これについてさらに考えてみると、問題はスリープ Free モナドではなく、評価時にバインドする Id.Id モナドにあると思います。
しかし、これの問題は、1 つのステップしか評価しないことです。理想的には、何らかの条件が満たされるまで runFC をブロックしたいと思います (または、この場合、それを強制終了するまで永遠にループしますが、スタック オーバーフローは発生しません)。
haskell - コンポーザブル フリー DSL でのあいまいな型の処理
freeおよびcompdataパッケージを使用して、「free monads」と「datatypes a la carte」に基づいて構成可能な DSL をいくつか構築しています ( Combining Free typesの精神に似ています)。
これはいくつかの単純な DSL では機能しますが、この型パラメーターに依存しないコンストラクター/コマンドの場合、型パラメーターを持つものに行き詰まり、GHC からあいまいな型パラメーターエラーが発生します。
明確にするために、ここにいくつかのコードがあります:
GHC で示唆されているように、 AllowAmbiguousTypes拡張機能を有効にしてこれを機能させようとしても、それ以上はうまくいきませんでした。型シグネチャにforall aスタイルのものをいくつか追加しようとしましたが、役に立ちませんでした。
このパターンを機能させる方法はありますか?
haskell - Free モナドに Church エンコーディングを使用するにはどうすればよいですか?
パッケージのFree
データ型を使用してControl.Monad.Free
います。free
今、私はそれを変換して使用しようとしてF
いControl.Monad.Free.Church
ますが、関数をマップする方法がわかりません。
たとえば、 を使用した単純なパターン マッチング関数Free
は次のようになります。
-とのF
間で変換して使用する関数に簡単に変換できます。Free
toF
ただし、使用せずにそれを実行する方法がわかりませんfromF
-
私が見逃している一般的なパターンがあるに違いありません。それを理解するのを手伝ってもらえますか?