On Mon, 2009-03-02 at 12:50 +0000, Bayley, Alistair wrote: > > From: haskell-cafe-boun...@haskell.org > > [mailto:haskell-cafe-boun...@haskell.org] On Behalf Of Duncan Coutts > > > > This can still be done using withFile and hGetContents. You > > just have to > > put the consumer inside the scope of withFile. The consumer > > can work in > > a streaming fashion. With lazy bytestrings this can be both efficient, > > work in constant memory and guarantee the file is closed. > > > > We guarantee the file is closed by using withFile. The only thing to > > watch out for is a consumer that doesn't consume as much as you were > > expecting before the file does get closed. You should notice > > that pretty > > quickly though since it should happen every time (whereas > > resource leaks > > are not so immediately visible). > > Sure. But this case is the one that typically causes problems for > beginners, who have not yet had the educating experience of being > bitten by lazy IO. The standard café response to "why do I get <handle > closed>" errors here?" is "you're using hGetContents and you haven't > forced/consumed all of your file".
This is quite true, but I expect that's easier to explain to beginners than iterator IO, at least at the present time. Duncan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe