module Data.Neither.Transformers () where
import Data.Neither.Base
import Prelude hiding (catch)
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Trans.Class
import "MonadCatchIO-transformers" Control.Monad.CatchIO (MonadCatchIO (..))
instance MonadTrans (MEitherT e) where
lift = MEitherT . liftM MRight
instance MonadIO m => MonadIO (MEitherT e m) where
liftIO = lift . liftIO
instance MonadCatchIO m => MonadCatchIO (MEitherT e m) where
m `catch` f = mapMEitherT (\m' -> m' `catch` \e -> runMEitherT $ f e) m
block = mapMEitherT block
unblock = mapMEitherT unblock