I have a list of strings, and tried this:
ls = [ \"banana\", \"mango\", \"orange\" ]
main = do
map PutStrLn list_of_strings
That di
Ayman's answer makes most sense for this situation. In general, if you have [m ()]
and you want m ()
, then use sequence_
, where m
can be any monad including IO
.
The type of the main
function should be IO t
(where t
is a type variable). The type of map putStrLn ls
is [IO ()]
. This why you are getting this error message. You can verify this yourself by running the following in ghci
:
Prelude> :type map putStrLn ls
map putStrLn ls :: [IO ()]
One solution to the problem is using mapM, which is the "monadic" version of map
. Or you can use mapM_ which is the same as mapM
but does not collect the returned values from the function. Since you don't care about the return value of putStrLn
, it's more appropriate to use mapM_
here. mapM_
has the following type:
mapM_ :: Monad m => (a -> m b) -> [a] -> m ()
Here is how to use it:
ls = [ "banana", "mango", "orange" ]
main = mapM_ putStrLn ls