A better way to map a function that requires IO over a list
===

So lately I have a list of strings, and need to indepently go over each one and perform some IO function. 

So basically what I have is this:

    goOverList :: [String] -> IO ()
    goOverList (x:[]) = do
        putStrLn x
    goOverList (x:xs) = do
        goOverList [x]
        goOverList xs
    
    main = do
        let myList = ["first", "second", "third"]
        goOverList myList

My IO is a bit more complicated but that is the gist of it (needing to have a function go over a list and do IO based on the list memember) I was hoping someone might show me how to do this better.  