
That would have been useful to know three weeks ago.
Better late than never I guess.
Thanks.
On Fri, Mar 15, 2013 at 1:24 AM, Kim-Ee Yeoh
On Fri, Mar 15, 2013 at 5:52 AM, Jacek Dudek
wrote: readFile fileName >>= \ contents -> writeFile fileName (f contents)
You're reading and writing to the /same/ file back to back. With Lazy I/O. Those two just don't mix.
The "permission denied" probably stems from the attempted write clashing with the previous exclusive read handle.
I thought lazy IO was implemented in such a way that you were safe to INTERPRET the IO action as having been fully performed.
Nope.
The usual gotcha lying for the unwary is
do h <- openFile fname1 ReadMode s <- hGetContents h hClose h writeFile fname2 s
In the case fname1==fname2, a different surprise lies in store as you've just witnessed.
Importing System.IO.Strict from the strict package should fix all of the above.
-- Kim-Ee
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners