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