[Haskell-cafe] Beginner: IORef constructor?
bjpop at csse.unimelb.edu.au
Fri Dec 1 02:25:58 EST 2006
On 01/12/2006, at 6:08 PM, TJ wrote:
> First of all, sorry if this is a really silly question, but I couldn't
> figure it out from experimenting in GHCi and from the GHC libraries
> documentation (or Google).
> Is there an IORef consturctor? Or is it just internal to the
> Data.IORef module?
> I want a "global variable", so I did the following:
> module VirtualWorld where
> import Data.IORef
> theWorld = IORef  -- This will be writeIORef'ed with a populated
> list as the user modifies the world.
> It doesn't work. GHCi says that the IORef constructor is not in scope.
> I did a ":module Data.IORef" and then "IORef " and it still gives me
> the same error.
> I'm using GHC 6.6 on Windows.
IORef is an abstract data type, so you cannot refer to its
Instead you must use:
newIORef :: a -> IO (IORef a)
which will create an IORef on your behalf. Note that the result is in
the IO type,
which limits what you can do with it.
If you want a global variable then you can use something like:
import System.IO.Unsafe (unsafePerformIO)
global = unsafePerformIO (newIORef )
But this is often regarded as bad programming style (depends who you
talk to). So you
should probably avoid this unless it is really necessary (perhaps you
could use a state
Read the comments about unsafePerformIO on this page:
especially the notes about NOINLINE and -fno-cse
More information about the Haskell-Cafe