<div dir="auto"><div dir="auto">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.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 11, 2019, 2:01 PM Li-yao Xia <<a href="mailto:lysxia@gmail.com" target="_blank" rel="noreferrer">lysxia@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello Libraries,<br>
<br>
In base, the functions which read all contents from a handle or file <br>
into one String currently all do lazy IO: readFile, getContents, <br>
hGetContents.<br>
<br>
<a href="https://hackage.haskell.org/package/base-4.12.0.0/docs/System-IO.html#v:hGetContents" rel="noreferrer noreferrer noreferrer" target="_blank">https://hackage.haskell.org/package/base-4.12.0.0/docs/System-IO.html#v:hGetContents</a><br>
<br>
The easiest way to get a strict alternative seems to be to explicitly <br>
force the list, for example using ```length contents `seq` pure ()```, <br>
but that's far from an obvious solution.<br>
<br>
Is there a better way?<br>
<br>
If not, I propose to add readFile', getContents', hGetContents', which <br>
don't do lazy IO.<br>
<br>
It regularly creates confusion among beginners, and it's easy to assume <br>
that lazy IO is benign if that's the only way to do certain operations, <br>
when it's arguably the wrong way to read files to begin with.<br>
<br>
Cheers,<br>
Li-yao<br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" rel="noreferrer noreferrer" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>