[Haskell-cafe] Make strict (IO String) lazy
Donald Bruce Stewart
dons at cse.unsw.edu.au
Thu Mar 15 10:10:17 EDT 2007
> On the one hand, in the standard libraries there are functions like
> readFile, getContents, hGetContents which read a file lazily. This is
> often a nice feature, but sometimes lead to unexpected results, say when
> reading a file and overwriting it with modified contents. Unfortunately
> the standard libraries provide no functions for strict reading, and one
> has to do this manually.
Data.ByteString.readFile is strict, and then:
import qualified Data.ByteString
strictReadFile :: FilePath -> IO String
strictReadFile = liftM B.unpack B.readFile
> On the other hand, when I write some IO function that returns a String, I
> easily end up with a function which produces the String in a strict way.
> (Say I call some shell commands and concatenate their outputs.)
> What is the preferred way to turn a strict (IO String) into a lazy one?
> forkIO? forkOS? How would one derive readFile from a hypothetical
unsafeInterleaveIO strict reads?
More information about the Haskell-Cafe