You mean that no Haskell programs can do I/O? Given that I've written Haskell programs that do I/O, I'd guess you're wrong.
In my (limited) experience, Haskell code to do I/O (i.e., Monads) isn't a pretty or elegant as purely functional Haskell code. A lot of Haskell's useful tricks (i.e., its beauty like the ridiculously strong type system or lazy evaluation) don't work on code with side effects.