module Control.Monad.Conc.ClassTmp ( MonadConc(..) ) where import qualified Control.Concurrent.Async as IO import qualified Control.Concurrent as IO import qualified Control.Concurrent.STM as IO class Monad m => MonadConc m where threadDelay :: Int -> m () race :: m a -> m b -> m (Either a b) fork :: m () -> m IO.ThreadId newChan :: m (IO.Chan a) readChan :: IO.Chan a -> m a writeChan :: IO.Chan a -> a -> m () killThread :: IO.ThreadId -> m () newTVarIO :: a -> m (IO.TVar a) atomically :: IO.STM a -> m a newEmptyMVar :: m (IO.MVar a) putMVar :: IO.MVar a -> a -> m () takeMVar :: IO.MVar a -> m a instance MonadConc IO where threadDelay = IO.threadDelay race = IO.race fork = IO.forkIO newChan = IO.newChan readChan = IO.readChan writeChan = IO.writeChan killThread = IO.killThread newTVarIO = IO.newTVarIO atomically = IO.atomically newEmptyMVar = IO.newEmptyMVar putMVar = IO.putMVar takeMVar = IO.takeMVar