{- - ``Data/MRef/Instances'' - (c) 2008 Cook, J. MR SSD, Inc. -} {-# LANGUAGE CPP, MultiParamTypeClasses, FlexibleInstances #-} -- |This module exports no new symbols of its own. It defines -- basic class instances for creating, reading, and writing 'MVar's, and -- re-exports 'MVar'. 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 -- preferred instances -- MVar in IO monad 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