stateref-0.2.1.1: src/Data/MRef/Instances.hs
{-
- ``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