module Data.MRef.Instances
( MVar
, MonadIO(..)
#ifdef useSTM
, module Data.MRef.Instances.STM
#endif
) where
#ifdef useSTM
import Data.MRef.Instances.STM
#endif
import Data.MRef.Classes
import Control.Concurrent.MVar
import Control.Monad.Trans
instance DefaultMRef (MVar a) IO a
instance MonadIO m => NewMRef (MVar a) m a where
newMRef = liftIO . newMVar
newEmptyMRef = liftIO newEmptyMVar
instance MonadIO m => TakeMRef (MVar a) m a where
takeMRef = liftIO . takeMVar
instance MonadIO m => PutMRef (MVar a) m a where
putMRef r = liftIO . putMVar r