cmb21:
> fo/haskell-cafe>,
> <mailto:[EMAIL PROTECTED]>
> Errors-To: [EMAIL PROTECTED]
> Status: O
> Content-Length: 778
> Lines: 27
>
> 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!
lazy IO at play. One quick fix would be to use strict IO:
import qualified Data.ByteString.Char8 as S
import Data.ByteString (ByteString)
main = do
ans <- S.readFile "t" -- strict file IO
print (S.length ans) -- current size
let (x,xs) = S.splitAt 10 ans -- "parse"
S.writeFile "t" xs
ans' <- S.readFile "t"
print (S.length ans') -- new size
$ time ./a.out
2487212
2487202
This comes up often enough that I think we should have a strict readFile for
Strings
-- Don
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe