Thanks for your replies on our previous posts. To avoid the lazy behaviour, we tried to write our own IO module "IOExts2" which basically redifnes
readFile, writeFile and appendFile to make sure they use binary-mode and strict behaviour. The libary is as follows:
---------- module IOExts2(readFile', writeFile', appendFile') where
import IO import IOExts
readFile' :: String -> IO String
readFile' inputfile = do readhandle <- openFileEx inputfile (BinaryMode ReadMode)
x <- hGetContents readhandle
seq x (return x)
{- seq x (do hClose readhandle
return x) -}
writeFile' :: String -> String -> IO() writeFile' outputfile text = seq text (writeFile'' outputfile text)
writeFile'' :: String -> String -> IO()
writeFile'' outputfile text = do writehandle <- openFileEx outputfile (BinaryMode WriteMode)
hPutStr writehandle text
hFlush writehandle
hClose writehandle
appendFile' :: String -> String -> IO() appendFile' outputfile text = seq text (appendFile'' outputfile text)
appendFile'' :: String -> String -> IO()
appendFile'' outputfile text = do appendhandle <- openFileEx outputfile (BinaryMode AppendMode)
hPutStr appendhandle text
hFlush appendhandle
hClose appendhandle
---------------
Yet, there's still one problem left with readFile'. The handles of appendFile' and writeFile' are properly closed, but when I try to close the handle used for reading (as shown by the parts
commented above) and try the following small test, which uses a file "123.txt" that consists of the string "blaat" only a "b" is outputted. When I do not close the handle, the entire string "blaat" is outputted.
test = do x <- readFile' "123.txt"
putStr xRegards, Niels Reyngoud
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
