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