content: -- | Unlifted "Data.IORef".
  --
  -- @since 0.1.0.0
  module UnliftIO.IORef
    ( IORef
    , newIORef
    , readIORef
    , writeIORef
    , modifyIORef
    , modifyIORef'
    , atomicModifyIORef
    , atomicModifyIORef'
    , atomicWriteIORef
    , mkWeakIORef
    ) where
  
  import Data.IORef (IORef)
  import qualified Data.IORef as I
  import Control.Monad.IO.Unlift
  import System.Mem.Weak (Weak)
  
  -- | Lifted 'I.newIORef'.
  --
  -- @since 0.1.0.0
  newIORef :: MonadIO m => a -> m (IORef a)
  newIORef = liftIO . I.newIORef
  
  -- | Lifted 'I.readIORef'.
  --
  -- @since 0.1.0.0
  readIORef :: MonadIO m => IORef a -> m a
  readIORef = liftIO . I.readIORef
  
  -- | Lifted 'I.writeIORef'.
  --
  -- @since 0.1.0.0
  writeIORef :: MonadIO m => IORef a -> a -> m ()
  writeIORef ref = liftIO . I.writeIORef ref
  
  -- | Lifted 'I.modifyIORef'.
  --
  -- @since 0.1.0.0
  modifyIORef :: MonadIO m => IORef a -> (a -> a) -> m ()
  modifyIORef ref = liftIO . I.modifyIORef ref
  
  -- | Lifted 'I.modifyIORef''.
  --
  -- @since 0.1.0.0
  modifyIORef' :: MonadIO m => IORef a -> (a -> a) -> m ()
  modifyIORef' ref = liftIO . I.modifyIORef' ref
  
  -- | Lifted 'I.atomicModifyIORef'.
  --
  -- @since 0.1.0.0
  atomicModifyIORef :: MonadIO m => IORef a -> (a -> (a, b)) -> m b
  atomicModifyIORef ref = liftIO . I.atomicModifyIORef ref
  
  -- | Lifted 'I.atomicModifyIORef''.
  --
  -- @since 0.1.0.0
  atomicModifyIORef' :: MonadIO m => IORef a -> (a -> (a, b)) -> m b
  atomicModifyIORef' ref = liftIO . I.atomicModifyIORef' ref
  
  -- | Lifted 'I.atomicWriteIORef'.
  --
  -- @since 0.1.0.0
  atomicWriteIORef :: MonadIO m => IORef a -> a -> m ()
  atomicWriteIORef ref = liftIO . I.atomicWriteIORef ref
  
  -- | Unlifted 'I.mkWeakIORef'.
  --
  -- @since 0.1.0.0
  mkWeakIORef :: MonadUnliftIO m => IORef a -> m () -> m (Weak (IORef a))
  mkWeakIORef ref final = withRunInIO $ \run -> I.mkWeakIORef ref (run final)
  