My program reads a line from a network socket and writes it to disc. Since lines can be really long and strings had terrible performance I started using lazy byte strings. Now it seems that Haskell will go past hClose
on disc file handle without actually flushing whole byte string to disc, so doing:
- open file for writing
- write byte string to file with
hPut
- close file
- open file for reading
usually results in openFile: resource busy (file is locked)
.
Is it possible to enforce evaluation and wait for the whole byte string to be written before closing the file, so I can be sure that the file is actually closed after that operation?