# Data.IORef

interface HasReference
  newIORef' : HasReference ffi => a -> IO' ffi (IORef a)
  readIORef' : HasReference ffi => IORef a -> IO' ffi a
  writeIORef' : HasReference ffi => IORef a -> a -> IO' ffi ()
data IORef : Type -> Type

  A mutable variable in the IO monad.

  MkIORef : a -> IORef a
modifyIORef : IORef a -> (a -> a) -> IO ()

  mutate the contents of an IORef

modifyIORef' : HasReference ffi => IORef a -> (a -> a) -> IO' ffi ()
newIORef : a -> IO (IORef a)

  Build a new IORef

readIORef : IORef a -> IO a

  read the value of an IORef

writeIORef : IORef a -> a -> IO ()

  write the value of an IORef