IO monad和订购

时间:2015-07-02 02:47:46

标签: haskell io monads side-effects io-monad

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

请考虑以下代码:

main = do
    putStr "test"
    getLine
    return ()

我的理解是do"胶水"三个IO monads合二为一。我的假设是它们将按顺序执行,即" test"将首先打印,然后行读取,然后虚拟return ()将生成()

但是,当我运行已编译的应用程序时,它始终等待打印之前读取" test"。

重新排序putStr / getLine并非如此。 "解缠"来自IO monad的价值,如下:

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

...也不会改变结果。

我在这里缺少什么?如何强制执行IO操作的命令?

0 个答案:

没有答案