我在編譯好的Haskell代碼中遇到了IO的奇怪行爲。這裏是發生了什麼:Haskell編譯IO-Action命令和Flushing
-- MyScript.hs
main = do
putStr "Enter your name: "
a <- getLine
putStrLn (a ++ " - that's a nice name!")
我GHCI運行通過調用main
和它的工作正如人們所預料,第一印刷Enter your name:
,然後做什麼它是後來的事。然而,當我與GHC(有和沒有--make
)編譯它,它首先會提示輸入線,並然後打印眼前的一幕,像這樣:
$ ./MyScript
Jimmy Johnson
Enter your name: Jimmy Johnson - That's a nice name!
爲了澄清,我希望它發生在以下順序:
$ ./MyFixedScript
Enter your name: Jimmy Johnson
Jimmy Johnson - That's a nice name!
有人能解釋爲什麼出現這種情況,因爲它是,如何測序IO,我希望它的方式。
請注意,我已經嘗試將do
語句的第一行更改爲_ <- putStr "Enter your name: "
,但這仍然無效。
這是由於緩衝而不是io動作的排序。 – sabauma 2014-12-05 20:50:13