問題タブ [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.
haskell - Haskellの標準入力から3つの連続した整数を読み取る方法は?
12 34 56Haskell を使用して入力を 3 つの整数に読み込みたい。
単一の整数の場合、myInteger <- readLn. しかし、この場合、最初に行を読み取り、次にすべてのスペースを , に置き換えるものを除いて、解決策は見つかりませんでした,(次のようなものを使用します:
)そして、read '[' ++ str ++ ']'非常にハックな感じの呼び出し。また、 3 つの整数を読み取りたいと述べることはできません。標準入力から任意の量の整数を読み取ろうとします。
もっと良い方法があるはずです。
外部パッケージに依存しないソリューションが欲しいことに注意してください。Parsec などを使用することはもちろん素晴らしいことですが、この単純な例では本格的な Parser Combinator フレームワークを使用する必要はありませんよね?
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- 持ち上げられた部分のモナド変換スタックのプロパティを「持ち上げる」方法はありますか?
scala - Scala標準APIでIO Haskell Monadに相当するものは何ですか?
Scalaz にはputStrLn :: String -> IO ()のような IO 演算子のほぼ同一の実装がいくつかあることは知っていますがgetLine :: IO String、Scala 標準 API については、なぜそのような等価物がないのでしょうか? Scala は Haskell のような純粋な言語ではなく、副作用があることは知っていますが、このデータ型は非常に記述的で便利だと思います。かどうかTry、OptionまたはEitherその仕事をするかどうかはわかりません。