1-- | Unlifted "Data.IORef". 2-- 3-- @since 0.1.0.0 4module UnliftIO.IORef 5 ( IORef 6 , newIORef 7 , readIORef 8 , writeIORef 9 , modifyIORef 10 , modifyIORef' 11 , atomicModifyIORef 12 , atomicModifyIORef' 13 , atomicWriteIORef 14 , mkWeakIORef 15 ) where 16 17import Data.IORef (IORef) 18import qualified Data.IORef as I 19import Control.Monad.IO.Unlift 20import System.Mem.Weak (Weak) 21 22-- | Lifted 'I.newIORef'. 23-- 24-- @since 0.1.0.0 25newIORef :: MonadIO m => a -> m (IORef a) 26newIORef = liftIO . I.newIORef 27 28-- | Lifted 'I.readIORef'. 29-- 30-- @since 0.1.0.0 31readIORef :: MonadIO m => IORef a -> m a 32readIORef = liftIO . I.readIORef 33 34-- | Lifted 'I.writeIORef'. 35-- 36-- @since 0.1.0.0 37writeIORef :: MonadIO m => IORef a -> a -> m () 38writeIORef ref = liftIO . I.writeIORef ref 39 40-- | Lifted 'I.modifyIORef'. 41-- 42-- @since 0.1.0.0 43modifyIORef :: MonadIO m => IORef a -> (a -> a) -> m () 44modifyIORef ref = liftIO . I.modifyIORef ref 45 46-- | Lifted 'I.modifyIORef''. 47-- 48-- @since 0.1.0.0 49modifyIORef' :: MonadIO m => IORef a -> (a -> a) -> m () 50modifyIORef' ref = liftIO . I.modifyIORef' ref 51 52-- | Lifted 'I.atomicModifyIORef'. 53-- 54-- @since 0.1.0.0 55atomicModifyIORef :: MonadIO m => IORef a -> (a -> (a, b)) -> m b 56atomicModifyIORef ref = liftIO . I.atomicModifyIORef ref 57 58-- | Lifted 'I.atomicModifyIORef''. 59-- 60-- @since 0.1.0.0 61atomicModifyIORef' :: MonadIO m => IORef a -> (a -> (a, b)) -> m b 62atomicModifyIORef' ref = liftIO . I.atomicModifyIORef' ref 63 64-- | Lifted 'I.atomicWriteIORef'. 65-- 66-- @since 0.1.0.0 67atomicWriteIORef :: MonadIO m => IORef a -> a -> m () 68atomicWriteIORef ref = liftIO . I.atomicWriteIORef ref 69 70-- | Unlifted 'I.mkWeakIORef'. 71-- 72-- @since 0.1.0.0 73mkWeakIORef :: MonadUnliftIO m => IORef a -> m () -> m (Weak (IORef a)) 74mkWeakIORef ref final = withRunInIO $ \run -> I.mkWeakIORef ref (run final) 75