Hello Dan,
`IO Integer` is something that, when executed, returns and `Integer` and there is no instance of `Show` for `IO Integer` as the compiler says.
You have to run the computations that will return the numbers and then print them, like so:
main :: IO ()
main = do
let filenames = ["/etc/services"]
let ioSizes = map get_size filenames :: [IO Integer]
sizes <- sequence ioSizes
mapM_ print sizes
-- sequence :: Monad m => [m a] -> m [a]
One important part is the use of sequence which transforms (ioSizes :: [IO Integer]) to `IO [Integer]` that is run and the result bound to (sizes : [Integer]).
Hope that's clear enough to get the point :)
Petr