0

私は IO モナドで遊んでおり、Haskell で副作用を利用することを学んでいますが、間違っているようです。

次のコードを検討してください。

main = do
    putStr "test"
    getLine
    return ()

ここでの私の理解は、do3 つの IO モナドを 1 つに「接着」するということです。私の仮定は、それらが順番に実行されることです。つまり、「test」が最初に出力され、次に行が読み取られ、次にダミーreturn ()が生成されます()

ただし、コンパイルされたアプリを実行すると、「テスト」を出力する前に行が読み取られるのを常に待機します。

並べ替えputStr/getLine何もしません。次のように、IO モナドから値を「アンラップ」します。

main = do
    _ <- putStr "test"
    _ <- getLine
    return ()

...結果も変わりません。

ここで何が欠けていますか?IO アクションの順序を強制する方法は?

4

0 に答える 0