Roland Senn wrote:
> [...] I now want to write a simple program, that prints out the first
> line of every file mentioned in 'filenames.txt'.
> [...]
> Everybody immediately sees, that the last function 'processSingleFile'
> is wrong! But how, has this example to be changed, to compile and
> run successfully ??
This can be done using mapM:
---------------------------------------------------------------------
import IO
main :: IO ()
main = do fromHandle <- openFile "filenames.txt" ReadMode
contents <- hGetContents fromHandle
firstLines <- mapM processSingleFile (lines contents)
putStr (unlines firstLines)
processSingleFile :: String -> IO String
processSingleFile s = do inh <- openFile s ReadMode
cont <- hGetContents inh
return (head (lines cont))
---------------------------------------------------------------------
mapM is in the standard Prelude and has the following signature:
mapM :: Monad m => (a -> m b) -> [a] -> m [b]
Specialized to the IO monad this means:
Given an IO action expecting an "a" and returning a "b"
and a list of "a"s,
yield an IO action returning a list of "b"s.
Here, both "a" and "b" are String.
P.S.: Closing the files with hClose would be a good idea...
--
Sven Panne Tel.: +49/89/2178-2235
LMU, Institut fuer Informatik FAX : +49/89/2178-2211
LFE Programmier- und Modellierungssprachen Oettingenstr. 67
mailto:[EMAIL PROTECTED] D-80538 Muenchen
http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne