
On Jan 30, 2008 8:31 AM, Bryan O'Sullivan
Peter Verswyvelen wrote:
Then I tried the "seq" hack to force the handle opened by readFile to be closed, but that did not seem to work either. For example, the following still gave access denied:
main = do cs <- readFile "L:/Foo.txt" writeFile "L:/Foo.txt" $ seq (length cs) cs
This is unfortunately a classic beginner's mistake. You got the seq wrong here, which is very common. [...] You need to float the call to seq out so that it's evaluated before the call to writeFile:
length cs `seq` writeFile cs
Another way of doing things: I've recently become a fan of Control.Exception.evaluate: main = do cs <- readFile "L:/Foo.txt" evalute (length cs) writeFile "L:/Foo.txt" cs This might be easier for beginners to understand than messing around with seq's (as long as you're already in the IO monad). -Judah