
I like the idea of having strict versions of these functions. I also prefer
to recommend people use the strict versions of these functions from text
package's Data.Text.IO to encouraging using String to load files. I agree
that people should be able to read file contents strictly without having to
use tricks like forcing the length.
On Wed, Sep 11, 2019 at 3:57 PM Joseph C. Sible
+1 to adding those non-lazy versions. Such functions could work without having to half-close the handle, thus making it easier to continue reading from a file after EOF (à la `tail -f`). (I've asked about how to do this exact thing before at https://stackoverflow.com/q/56221606/7509065 and this would give it a trivial answer.)
Joseph C. Sible
On Wed, Sep 11, 2019 at 2:01 PM Li-yao Xia
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.
https://hackage.haskell.org/package/base-4.12.0.0/docs/System-IO.html#v:hGet...
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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- Eric Mertens