I\'ve already checked Hoogle, http://hackage.haskell.org/package/base-4.7.0.1/docs/Prelude.html#v:mapM, which says that mapM_
ignores the results.
However,
mapM_
is useful for executing something only for its side effects. For example, printing a string to standard output doesn't return anything useful - it returns ()
. If we have a list of three strings, we would end up accumulating a list[(), (), ()]
. Building this list has a runtime cost, both in terms of speed and memory usage, so by using mapM_
we can skip this step entirely.
However, sometimes we need to execute side effects and build up a list of the results. If we have a function such as
lookupUserById :: UserId -> IO User
Then we can use this to inflate a list of UserId
s to a list of User
s:
lookupUsers :: [UserId] -> IO [User]
lookupUsers = mapM lookupUserById