私は IO モナドで遊んでおり、Haskell で副作用を利用することを学んでいますが、間違っているようです。
次のコードを検討してください。
main = do
putStr "test"
getLine
return ()
ここでの私の理解は、do
3 つの IO モナドを 1 つに「接着」するということです。私の仮定は、それらが順番に実行されることです。つまり、「test」が最初に出力され、次に行が読み取られ、次にダミーreturn ()
が生成されます()
ただし、コンパイルされたアプリを実行すると、「テスト」を出力する前に行が読み取られるのを常に待機します。
並べ替えputStr
/getLine
何もしません。次のように、IO モナドから値を「アンラップ」します。
main = do
_ <- putStr "test"
_ <- getLine
return ()
...結果も変わりません。
ここで何が欠けていますか?IO アクションの順序を強制する方法は?