問題タブ [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.

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

haskell - Haskellの標準入力から3つの連続した整数を読み取る方法は?

12 34 56Haskell を使用して入力を 3 つの整数に読み込みたい。

単一の整数の場合、myInteger <- readLn. しかし、この場合、最初に行を読み取り、次にすべてのスペースを , に置き換えるものを除いて、解決策は見つかりませんでした,(次のようなものを使用します:

)そして、read '[' ++ str ++ ']'非常にハックな感じの呼び出し。また、 3 つの整数を読み取りたいと述べることはできません。標準入力から任意の量の整数を読み取ろうとします。

もっと良い方法があるはずです。

外部パッケージに依存しないソリューションが欲しいことに注意してください。Parsec などを使用することはもちろん素晴らしいことですが、この単純な例では本格的な Parser Combinator フレームワークを使用する必要はありませんよね?

0 投票する
0 に答える
120 参照

haskell - forkIO/catch ブロック内のログ記録

URLをGETすることで開始されたシェイクを使用してレポートを生成するサーバントアプリを構築しています。ものをログに記録するように要求されるまで、これは魅力的に機能していましたが、今は問題にぶつかっています。

1 つのハンドラーstartがレポートの生成を開始します (これにはかなりの時間がかかる場合があるため)。すぐに 200 を返し、実際の作業を行うプロセスを生成します。ロギングは によって行われlogging-effectます。

私のハンドラーの簡略化されたバージョンはstart次のようになります

AppのインスタンスであるMonadLog (WithTimestamp (WithSeverity Doc))ため、正常にlogInfo動作します。✔</p>

正確Appには、次の newtype です。

logErrorしかし、パーツ内で呼び出そうとすると、生成された/一時ファイルを削除するアクションcaughtと並んでcleanup、コンパイラ エラーが発生します。✘</p>

そして、これは正しいです のようなインスタンスはIOありません。実行時にクラッシュしないことを教えてくれてありがとうghc!

これらは私が経験している考えです-誰かが間違った仮定を見ているかもしれません:

  • forkIOレポート生成をフォークするために使用する必要がありますか?
  • forkIOish :: MonadIO m => m () -> m ThreadIdのように機能するものがあれば、それはcatchIsh :: (MonadIO m, Exception e) => m a -> (e -> m a) -> m a 私を助けてくれますか? - はい、そう思います -私の場合、内部liftIOを呼び出している間にクリーンアップと mkReport の部分を実行できました。logErrorApp
  • 持ち上げられた部分のモナド変換スタックのプロパティを「持ち上げる」方法はありますか?
0 投票する
2 に答える
269 参照

scala - Scala標準APIでIO Haskell Monadに相当するものは何ですか?

Scalaz にはputStrLn :: String -> IO ()のような IO 演算子のほぼ同一の実装がいくつかあることは知っていますがgetLine :: IO String、Scala 標準 API については、なぜそのような等価物がないのでしょうか? Scala は Haskell のような純粋な言語ではなく、副作用があることは知っていますが、このデータ型は非常に記述的で便利だと思います。かどうかTryOptionまたはEitherその仕事をするかどうかはわかりません。