Strict getContents

David Feuer david.feuer at
Thu Sep 12 14:51:20 UTC 2019

Certainly reading directly into a String is inefficient for a strict read.
I imagine the best way is to read (eagerly) into a lazy ByteString and
decode that lazily into a String. Even for Text, it may well be better to
read into a lazy ByteString and decode into lazy Text, since the latter
tends to take considerably more memory.

On Wed, Sep 11, 2019, 2:01 PM Li-yao Xia <lysxia at> wrote:

> Hello Libraries,
> In base, the functions which read all contents from a handle or file
> into one String currently all do lazy IO: readFile, getContents,
> hGetContents.
> The easiest way to get a strict alternative seems to be to explicitly
> force the list, for example using ```length contents `seq` pure ()```,
> but that's far from an obvious solution.
> Is there a better way?
> If not, I propose to add readFile', getContents', hGetContents', which
> don't do lazy IO.
> It regularly creates confusion among beginners, and it's easy to assume
> that lazy IO is benign if that's the only way to do certain operations,
> when it's arguably the wrong way to read files to begin with.
> Cheers,
> Li-yao
> _______________________________________________
> Libraries mailing list
> Libraries at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list