[Haskell-beginners] Reading in the contents of a variable number of files

Daniel Fischer daniel.is.fischer at web.de
Tue Mar 16 17:28:55 EDT 2010


Am Dienstag 16 März 2010 22:10:46 schrieb Tim Perry:
> I need to read in and then combine a variable number of files. I am
> trying to figure out how to get the contents of all the files into an
> array.
>
> let fileContentsArray = getData ["dataFile1.txt",
> "dataFile2.txt"]
>
> getData :: [String] -> [String]
> getData [] = []
> getData (f:files) = do
>                        fileData
> <- readFile f
>                        fileData : (getData files)
>
> I figured I could use readFile to open the files. But, I need to use
> <- to get the data out of the IO Action and into a value. I thought I
> could write a function like the following, but I'm getting no-where. I
> suspect I'm missing something basic about IO in Haskell. Can anybody
> point me to a good resource....

If you're in IO, you can't get out (well, you can, but you shouldn't unless 
you really know what you do, the first six letters of unsafePerformIO 
really mean what they say).

Is

do some stuff
   more stuff
   fileContentsList <- mapM readFile ["dataFile1.txt","dataFile2.txt"]
   print $ use fileContentsList other things

with an IO-free use function an option?

>
> Thanks,
> Tim


More information about the Beginners mailing list