
Hello Piotr, Monday, July 31, 2006, 4:23:16 PM, you wrote:
first solution: http://haskell.org/haskellwiki/Library/Streams
Looks nice. Just a quick question - does it have an equivalent of read(write)File?
no, but you can borrow this code from ghc's System.IO module, see below. actually, if you need only these two functions, borrowing jhc's code will be enough -- | The 'interact' function takes a function of type @String->String@ -- as its argument. The entire input from the standard input device is -- passed to this function as its argument, and the resulting string is -- output on the standard output device. interact :: (String -> String) -> IO () interact f = do s <- getContents putStr (f s) -- | The 'readFile' function reads a file and -- returns the contents of the file as a string. -- The file is read lazily, on demand, as with 'getContents'. readFile :: FilePath -> IO String readFile name = openFile name ReadMode >>= hGetContents -- | The computation 'writeFile' @file str@ function writes the string @str@, -- to the file @file@. writeFile :: FilePath -> String -> IO () writeFile f txt = bracket (openFile f WriteMode) hClose (\hdl -> hPutStr hdl txt) -- | The computation 'appendFile' @file str@ function appends the string @str@, -- to the file @file@. -- -- Note that 'writeFile' and 'appendFile' write a literal string -- to a file. To write a value of any printable type, as with 'print', -- use the 'show' function to convert the value to a string first. -- -- > main = appendFile "squares" (show [(x,x*x) | x <- [0,0.1..2]]) appendFile :: FilePath -> String -> IO () appendFile f txt = bracket (openFile f AppendMode) hClose (\hdl -> hPutStr hdl txt) -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com