-- | Instances of the 'MonadIO' class for 'StateT', 'WriterT', 'ReaderT', 'ExcT',
--   'ContT', and 'ListT'.
--
--   Re-exports "Control.Monad.IO.Class" for convenience.
module Control.Monatron.IO (module Control.Monad.IO.Class) where

import Control.Monatron.Monatron (MonadT(..), Monoid, StateT, WriterT, ReaderT, ExcT, ContT, ListT)
import Control.Monad.IO.Class

instance MonadIO m => MonadIO (StateT z m) where
  liftIO = lift . liftIO

instance (MonadIO m, Monoid z) => MonadIO (WriterT z m) where
  liftIO = lift . liftIO

instance MonadIO m => MonadIO (ReaderT z m) where
  liftIO = lift . liftIO

instance MonadIO m => MonadIO (ExcT z m) where
  liftIO = lift . liftIO

instance MonadIO m => MonadIO (ContT r m) where
  liftIO = lift . liftIO

instance MonadIO m => MonadIO (ListT m) where
  liftIO = lift . liftIO