
I was playing with winghci and I tried: mapM id [Just 1, Just 2, Just 3] result: Just [1,2,3] I don't understand this answer.
From http://members.chello.nl/hjgtuyl/tourdemonad.html#mapM http://members.chello.nl/hjgtuyl/tourdemonad.html#mapM mapM mf xs takes a monadic function mf (having type Monad m => (a -> m b)) and applies it to each element in list xs; the result is a list inside a monad.
A few things I've found: mapM :: (a -> m b) -> [a] -> m [b] So in this case: a = Maybe Int (second arg in mapM id [Just1, Just 2, Just 3] and b = Int and m = Maybe. So id is :: Maybe Int -> Maybe Int mapM id [Just 1, Nothing, Just 3] result: Nothing. My first guess for the result: Just [Just 1, Nothing, Just 3] when I do: mapM id [1,2,3] I get an error (id has wrong type, which makes sense) Can somebody explain what is going on here? Kees