unsafePerformIO is part of the the Haskell 98 Foreign Function Interface, which is "An Addendum to the Haskell 98 Report". (See chapter 5 Marshalling <http://www.cse.unsw.edu.au/~chak/haskell/ffi/ffi/ffise5.html...) All haskell compilers support the foreign function interface, and it will be a required part of the next haskell standard.
Use of unsafePerformIO (or any other unsafe function) should rarely be needed in real world programs though.