問題タブ [io-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.
io - Scalaz IO モナドと Stream を組み合わせて takeWhile メソッドを使用した単純なエコー プログラムを作成する
Scalaz IO Monad と Stream を使用して、spoj.com で「生命、宇宙、およびすべて」の問題の解決策を探しています。問題は、小さな数値を入力から出力に書き換え、数値 42 を読み取った後に入力の処理を停止することです。次のクラスを作成しました。
終わりのないループは期待どおりに機能します。
ただし、42番で終了させたい場合は、終了しません。
結局、このコードが 42 を出力することになっていることはわかっていますが (問題ステートメントとは対照的に)、サンプル コードを単純化したかったのです。
どこで間違いを犯していますか?
unit-testing - ファイル システムから Tasty `TestTree` を動的に生成する
Parsec
ライブラリを使用してファイル パーサーを作成しました。Tasty
パーサーが特定のファイルを正しく解析することを確認するために、テスト フレームワークを使用して高レベルの単体テストを作成したいと考えています。
次のディレクトリ構造に、適切にフォーマットされた 3 つのファイルがあります。
私はしたいと思います:
- すべてのファイルを取得する
path/to/files
- 各ファイルの内容を読み取る
testCase
ファイルのコンテンツが正常に解析されることを保証する for each ファイルを作成します- これを動的に実行して、後でファイルを追加し、コードを変更しないようにします
私は次のように構築することができました:
この構造は機能しますが、理想的ではありません。これは、 のtestSuite
実行時に生成される出力があまり説明的でないためです。
成功時:
失敗時:
この出力は、解析に失敗したすべてのファイルではなく、解析に失敗した最初のファイルのみを出力するため、理想的ではありません。また、エラーがあるかどうかに関係なく、どのファイルが正常に解析されているかもわかりません。
テストツリーを次のようにしたいと思います。
成功時:
失敗時:
TestTree
ファイルシステムから動的に整形式を作成しようとする私の試みは次のとおりです。
ご覧のとおり、このコードにはviaunsafePerformIO
を抽出する見苦しい呼び出しがあります。ファイル システムから派生した情報 (ファイル名) を構成内で使用する方法を理解できなかったため、この安全でない関数呼び出しを使用せざるを得ないと感じました。結果はモナドに閉じ込められました。TestTree
unsafePerformIO :: IO [TestTree] -> [TestTree]
testCase
[TestTree]
IO
この安全でない関数を使用するのは理想的ではないだけでなく、IO
アクションが実際には安全でないため、機能しません。次の例外が発生するため、テスト スイートは実行されません。
の型シグネチャが与えられた場合withResource
:
または呼び出しのパラメーターで入力を使用しないIO a -> TestTree
最後のパラメーターの型の関数を構築することは不可能であることがわかりました。フレームワーク作成者の詳細な説明を確認したにもかかわらず、おそらく to の使用方法を理解していない可能性があります。Tasty フレームワーク内に、目的を達成するためのより良い機能があるのではないでしょうか?withResource
IO a
TestName
testCase
testGroup
Tasty
withResources
TestTree
質問:
TestTree
必要な記述出力を持つファイル システムから動的に作成するにはどうすればよいですか?
haskell - IO モナド haskell の階乗関数
私は IO モナド haskell で階乗関数を実行しています。IO モナドで階乗関数を実行するために、mod3 の例に従いました。私のコードが間違っている理由を理解できません。n>=1 かどうかを確認してから、階乗を n に実行します。最後に (n,r2) に追加して戻ります。誰でもそれを理解するのを助けることができますか?
f# - F# で別のプロセス メモリ モナドを読み書きする
シングルプレイヤーゲームのチートに取り組んでいます。私は関数合成、不変性、ボイラープレートのないコードが好きなので、チートを F# で書くことにしました。私はうまくいくものを完成させました。コードが完璧とはほど遠いことは承知していますが、今日、私は F# を使って旅を始めました。
コードから何らかの形で副作用を取り除く方法があるのだろうか。これを達成する方法を教えてください。
ありがとう、
ラファル
haskell - ハスケル。なぜ機能しているのですか?(モナドの繰り返し)
走る:
私は出力を得ました:
この関数がすべてのリストの値にどのようにマッピングされているかわかりませんか? 再帰や反復はなく、モナドの内部 m 値を関数 f に渡すだけです。ここで何が欠けていますか?
haskell - 状態とランダム性の概念を使用して、このモナド計算を実行します
次の計算について説明します。
bar
そして、予想通り、半分の時間にbar
評価されるように実行する方法を知りたいです。True
xml - HXT でツリーを解析しながら、他の XML ファイルを解析する
ゲームのユーザー インターフェイスを記述する XML ファイルを解析し、同時に HXT を学習しようとしています。1 つの XML ファイルを正常に解析できます。getWindow
しかし、関数内で他の XML ファイルを開いて解析する最良の方法は何かを理解できませんでした。
各 XML は、いくつかの で構成されますWindow
。それぞれWindow
にname
と がありlibraryName
ます。後者は、ウィンドウを記述する XML ファイルの名前です。たとえば、ルートは次のようになります。
そして、ウィンドウごとに個別の XML ファイルがあります。例 "window_home":
次のコードでルートを解析DOMDocument.xml
します。
getWindow
関数が内部にラップされていないためIO
、目的の動作を実現するための最良の方法は何ですか?
haskell - Haskell: 予想される型 'IO b' を実際の型 bool と一致させることができませんでした
次のエラーが表示されます。
の定義によりgameFunc
:
と関数upCheck
:
つまり、基本的にここで起こっているupCheck
のは、いくつかの条件が一致しているかどうかを確認する関数であり、関数から呼び出すのと同じ方法で ghci から呼び出すとgameFunc
、結果が得られTrue
ます。ただし、関数から呼び出すと、gameFunc
上記のエラーが発生します。何がうまくいかなかったのですか?
haskell - Haskell セーフ IO
ファイルが存在する場合はファイルを安全に読み取り、ファイルが存在しない場合は何もしない単純な関数を作成しようとしています。
これはコンパイル時に失敗します
であるため、これは理にかなって:t readFile
いますreadFile :: FilePath -> IO String
。を返す関数IO String
など (とIO String
同じではありませんIO ()
)
署名の変更String -> IO String
handleExists には型があるので、これも理にかなっていますIO ()
全員のルックアップを保存するには、catch を次のようにインポートします。catch
import Control.Exception
のシグネチャは次のとおりです。
catch :: Exception e => IO a -> (e -> IO a) -> IO a
私の本当の質問は、この種のエラーセーフで柔軟なコードを Haskell で書くにはどうすればよいかということです。より具体的には、成功ケースと失敗ケースの両方を処理できるようにするには、この関数にどのような変更を加える必要があるでしょうか?