Hello all,

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 x

Regards,
Niels Reyngoud

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to