問題タブ [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 56
Haskell を使用して入力を 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 の部分を実行できました。logError
App
- 持ち上げられた部分のモナド変換スタックのプロパティを「持ち上げる」方法はありますか?
scala - Scala標準APIでIO Haskell Monadに相当するものは何ですか?
Scalaz にはputStrLn :: String -> IO (
)のような IO 演算子のほぼ同一の実装がいくつかあることは知っていますがgetLine :: IO String
、Scala 標準 API については、なぜそのような等価物がないのでしょうか? Scala は Haskell のような純粋な言語ではなく、副作用があることは知っていますが、このデータ型は非常に記述的で便利だと思います。かどうかTry
、Option
またはEither
その仕事をするかどうかはわかりません。