module Access.Control.Concurrent.MVar ( module Control.Concurrent.MVar , MVarAccess(..) , WeakMVarAccess(..) ) where import Control.Concurrent.MVar import Access.Core import Access.System.Mem.Weak class Access io => MVarAccess io where newEmptyMVar' :: io (MVar a) newMVar' :: a -> io (MVar a) takeMVar' :: MVar a -> io a putMVar' :: MVar a -> a -> io () readMVar' :: MVar a -> io a swapMVar' :: MVar a -> a -> io a tryTakeMVar' :: MVar a -> io (Maybe a) tryPutMVar' :: MVar a -> a -> io Bool isEmptyMVar' :: MVar a -> io Bool withMVar' :: MVar a -> (a -> IO b) -> io b modifyMVar_' :: MVar a -> (a -> IO a) -> io () modifyMVar' :: MVar a -> (a -> IO (a, b)) -> io b modifyMVarMasked_' :: MVar a -> (a -> IO a) -> io () modifyMVarMasked' :: MVar a -> (a -> IO (a, b)) -> io b class (WeakMemAccess io, MVarAccess io) => WeakMVarAccess io where mkWeakMVar' :: MVar a -> IO () -> io (Weak (MVar a)) instance MVarAccess IO where newEmptyMVar' = newEmptyMVar newMVar' = newMVar takeMVar' = takeMVar putMVar' = putMVar readMVar' = readMVar swapMVar' = swapMVar tryTakeMVar' = tryTakeMVar tryPutMVar' = tryPutMVar isEmptyMVar' = isEmptyMVar withMVar' = withMVar modifyMVar_' = modifyMVar_ modifyMVar' = modifyMVar modifyMVarMasked_' = modifyMVarMasked_ modifyMVarMasked' = modifyMVarMasked instance WeakMVarAccess IO where mkWeakMVar' = mkWeakMVar