
On 12/22/05, Daniel Carrera
Paul Moore wrote:
As I say, I'm not trying to criticize anyone here, but it seems to be quite hard to get across to people who have understood and assimilated this sort of stuff, just how hard it feels to newcomers. We understand the explanations (we do! really! :-)) but even understanding them, we are still left with a lack of confidence. It's like being shown a full set of carpentry tools, having every one explained, but still reaching for the hammer every time and banging something no matter what we're trying to do :-)
I had never heard of mapM, or other -M functions. I can't imagine why those would be needed. It seems like pointless duplication.
mapM is like map except you map an IO Action over a list instead of a function of a list. For instance sizes <- mapM getFileSize myListOfFileNames If you used "map" here you'd end up with a list of IO actions, and not a list of file sizes. You'd then have to go through this list of IO actions and using (<-) on each element to get the file sizes. This can, incidentally, be done using the function 'sequence'. liftM lifts a function so that you can use a regular function on an IO Action instead of first having to extract the value of the IO action using (<-). It's just shorthand, so you could do: x <- liftM length (readFile "afile") Instead of having to do f <- readFile "afile" let x = length f The M functions really are useful, get to know them! /S -- Sebastian Sylvan +46(0)736-818655 UIN: 44640862