Haskell 使用putStr和getLine的IO操作顺序错误

Haskell 使用putStr和getLine的IO操作顺序错误,haskell,io,ghc,buffering,Haskell,Io,Ghc,Buffering,我有以下代码: main = do putStr "Test input : " content <- getLine putStrLn content 为什么测试输入:asd在asd之后打印 在上使用putStr的代码示例中,getLine显示的输出与我的不同。当我使用putStrLn时,程序按预期工作(打印、提示和打印) 这是ghc中的一个bug,还是它应该工作的方式?这是因为ghci禁用了缓冲,而使用ghc编译的程序默认具有行缓冲。通过运行以下命令,可以看到

我有以下代码:

main = do
    putStr "Test input : "
    content <- getLine
    putStrLn content
为什么
测试输入:asd
asd
之后打印

在上使用
putStr
的代码示例中,
getLine
显示的输出与我的不同。当我使用
putStrLn
时,程序按预期工作(打印、提示和打印)


这是ghc中的一个bug,还是它应该工作的方式?

这是因为ghci禁用了缓冲,而使用ghc编译的程序默认具有行缓冲。通过运行以下命令,可以看到这一点:

import System.IO
main = print =<< hGetBuffering stdout
import System.IO

main=print=您可能需要
import System.IO
而不是
import IO
@KamilSzot:我在使用System.IO时遇到了相同的症状
import System.IO
main = print =<< hGetBuffering stdout