Hi Neil, > When you add that extra line the act of writing out the remainer > causes the rest of the input to be fully evaluated and hence the > filehandle is closed.
Ah, yes of course :) I've found that: let (answer2, remainder) = parseAnswer (force answer) where force :: Eq a => a -> a force x = if x==x then x else x Seems to do the trick. Thanks! Chris. > > On 04/02/07, C.M.Brown <[EMAIL PROTECTED]> wrote: > > Hi, > > > > I am observing some rather strange behaviour with writeFile. > > > > Say I have the following code: > > > > answer <- AbstractIO.readFile "filename" > > let (answer2, remainder) = parseAnswer answer > > if remainder == "" && answer2 == "" > > then do > > AbstractIO.putStrLn $ "completed" > > else do > > AbstractIO.putStrLn answer2 > > AbstractIO.writeFile "filename" remainder > > > > With the above I get an error saying the resources to "filename" are > > locked. If I add the line "AbstractIO.putStrLn $ show (answer2, remainder) > > before I call writeFile it suddenly magically works! > > > > Has anyone seen strange behaviour like this before? > > > > Regards, > > Chris. > > _______________________________________________ > > Haskell-Cafe mailing list > > Haskell-Cafe@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-cafe > > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe