[Haskell-cafe] Make strict (IO String) lazy
bringert at cs.chalmers.se
Thu Mar 15 10:11:02 EDT 2007
Henning Thielemann wrote:
> 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.
> 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
Perhaps I misunderstood you, but wouldn't using fork* just make it
nondeterministic, not lazy? unsafeInterleaveIO is the way to go, though
it won't allow you to write readFile using strictReadFile. Rather, it
allows you to write readFile using hGetChar. unsafeInterleaveIO .
strictReadFile is not lazy enough, since it reads the whole file when
you force the head of the string.
More information about the Haskell-Cafe