[Haskell-beginners] Moment of enlightenment for lazy evaluation
Tom Tobin
korpios at korpios.com
Sat Feb 20 20:23:48 EST 2010
On Sat, Feb 20, 2010 at 4:42 PM, Stephen Blackheath [to
Haskell-Beginners] <mutilating.cauliflowers.stephen at blacksapphire.com>
wrote:
> Tom,
>
> The bad news is that 1. Haskell makes no guarantee about when the files
> are closed,
Hmm, Data.ByteString.Lazy.readFile's docstring says:
"Read an entire file lazily into a ByteString. The Handle will be held
open until EOF is encountered."
It certainly seemed to change matters once I switched that $ to $!,
though; I don't see why that would have helped me unless the handles
were indeed being closed.
> 2. file handles are a limited resource
Well, yes, that's why I ran into the original problem.
> and 3. lazy I/O
> doesn't handle errors in a recoverable fashion.
I suppose this will be something I'll run into before too long.
> Unfortunately this
> means that lazy I/O is fundamentally unsound.
>
> The only safe way to do it is to read the file strictly in blocks using
> Data.ByteString.hGet.
But with the strict version of ByteString, how would I compute the
SHA1 hash of an 8 GB file on a machine with quite a bit less memory?
I can't imagine Haskell just has no way to handle a case that other
languages handle easily.
More information about the Beginners
mailing list