Global variables

David House dmhouse at
Thu Feb 1 16:14:05 EST 2007

(CCing the list as this is of general concern.)

On 01/02/07, Yitzchak Gale <gale at> wrote:
> Why is this unsafe? What could go wrong?

It could segfault due to the type safety properties that unsafePerformIO breaks:

import System.IO.Unsafe
import Data.IORef

ref :: IORef [a]
ref <- newIORef []

main = do
  writeIORef ref [42]
  val <- readIORef ref
  print (val :: [Char])

If you use the pragma you're forced to import unsafePerformIO and
hopefully check the haddock docs [1] where this issue is listed.


-David House, dmhouse at

More information about the Haskell-prime mailing list