ami*_*dfv 9 monads haskell do-notation
我有一系列网络请求,每个请求大于10秒.
为了让用户知道发生了什么,我给出了更新:
main = do putStr "Downloading the first thing... "
{- Net request -}
putStrLn "DONE"
putStr "Downloading the second thing... "
{- Net request -}
putStrLn "DONE"
Run Code Online (Sandbox Code Playgroud)
使用GHCi,这可以按预期工作,但编译或使用runghc,"下载"不打印直到"完成".
我用(>> =)和(>>)重写了它,但是我遇到了同样的问题.
这是怎么回事?
sep*_*p2k 16
这里的问题不在于执行顺序.语句按照您期望的顺序执行.问题在于,由于缓冲,您实际上并不会在结果发生时立即看到结果.
特别是终端IO默认为线路缓冲.这意味着在打印换行符或刷新缓冲区之前,屏幕上不会显示任何输出.所以你需要hFlush在执行后使用刷新'输出流,putStr或者你需要使用hSetBuffering不使用行缓冲来改变stdout的缓冲模式.