On Jan 30, 2008 8:31 AM, Bryan O'Sullivan <[EMAIL PROTECTED]> wrote: > 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe