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

Reply via email to