在写入文件haskell之前打印输出

时间:2017-01-17 13:49:09

标签: haskell printing

假设我有这段代码:

import qualified Data.ByteString as B

main = do
            ... --some code that gets an array of ByteStrings called "files"
            putStrLn "Saving myFile1"
            B.writeFile "myFile1.bin" $ files!!0
            putStrLn "Saving myFile2"
            B.writeFile "myFile2.bin" $ files!!1
            putStrLn "Done!"

不是在后续文件写入之前打印出每个字符串,而是在保存文件后似乎立即打印出所有内容。这种功能不方便通知用户进度,因为他们只有在完成所有文件写入后才会收到这些消息。

我的代码显然不是那么糟糕(我使用sequence的函数列表)但这很好地说明了问题。有什么我做错了,或者这是不可能的?

1 个答案:

答案 0 :(得分:0)

就像@WillemVanOnsem所说,这是一个缓冲问题。您可以在每次打印后手动刷新缓冲区,也可以change the buffering mode entirely

columns.Bound(p => p.UploadDate).ClientTemplate("#=kendo.toString(kendo.parseDate(UploadDate), 'MM/dd/yyyy HH:mm:ss')#");

import System.IO
import qualified Data.ByteString as B

main = do
            ... --some code that gets an array of ByteStrings called "files"
            putStrLn "Saving myFile1"
            hFlush stdout
            B.writeFile "myFile1.bin" $ files!!0
            putStrLn "Saving myFile2"
            hFlush stdout
            B.writeFile "myFile2.bin" $ files!!1
            putStrLn "Done!"
            hFlush stdout