0

我正在玩 IO monad 并学习在 Haskell 中利用副作用,似乎我弄错了。

考虑以下代码:

main = do
    putStr "test"
    getLine
    return ()

我在这里的理解是do将三个 IO 单子“粘合”成一个。我的假设是它们将按顺序执行,即“test”将首先打印,然后 line read,然后 dummyreturn ()将产生()

但是,当我运行已编译的应用程序时,它总是在打印“测试”之前等待读取行。

重新排序putStr/getLine没有任何作用。来自 IO monad 的“展开”值,如下所示:

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

...也不会改变结果。

我在这里想念什么?如何强制执行 IO 操作的顺序?

4

0 回答 0