I'm not sure how far you got after this point, but the problem is easily solved with a higher-order function:
mapM_ print "blahblahblah"
mapM_ (putStrLn . return) "hello one at a time"
mapM_ putChar "horse raddish"
putStr "egg freckles"
If you are frequently wanting to do this, you are probably doing something wrong. Haskell's lists are intended to be used as control structures, not indexed data structures. For those, you'll want an Array, Vector, IntMap etc.