Perhaps re-wording it will help?<p>1. In Haskell, the IO monad is a pure way to represent IO. It does not violate purity.<p>2. "unsafePerformIO" violates purity, type safety, and half a dozen other semantics as well. It is not part of the language standard, and requires special compiler flags and pragmas to use. Its use (except in FFI) is heavily discouraged, and often involves a proof of correctness to prevent its "unsafe-ness" from leaking.