My 2 cent:

Why does seq not help? See code below.

Simon Marlow (Thu, Jan 04, 2007 at 03:08:45PM +0000):
> and the original code was this:
> 
>   load fn = do handle <- IO.openFile fn IO.ReadMode
>                contents <- IO.hGetContents handle
>                IO.hClose handle
>                return $ XP.xmlParse fn contents
> 
> Sure, you can replace the openFile/hGetContents pair by readFile, but the 
> real problem is the presence of the hClose.  Removing that will solve your 
> problem (but note that you now have no control over when the file is 
> actually closed).

load fn = do handle <- IO.openFile fn IO.ReadMode
             contents <- IO.hGetContents handle
             let res = XP.xmlParse fn contents
             seq res $ IO.hClose handle -- maybe use deepSeq
             return $ res

load fn = do handle <- IO.openFile fn IO.ReadMode
             contents <- IO.hGetContents handle
             let len = length contents
             seq len $ IO.hClose handle
             return $ XP.xmlParse fn contents

Cheers,
-- 
Stefan

_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to