concur-core-0.1.0.0: src/Control/MonadSTM.hs
{-# LANGUAGE FlexibleInstances #-}
module Control.MonadSTM where
import Control.Concurrent.STM (STM, atomically)
import Control.Monad.Trans (MonadTrans (..))
-- | Like `MonadIO` but for `STM` monad
-- `MonadBase` seemed too cumbersome for this.
class MonadSTM m where
liftSTM :: STM a -> m a
instance MonadSTM IO where
liftSTM = atomically
instance (MonadTrans t, Monad m, MonadSTM m) => MonadSTM (t m) where
liftSTM = lift . liftSTM