{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Network.API.Mandrill.Trans where import Control.Monad.Reader import Control.Applicative import Network.API.Mandrill.Types -------------------------------------------------------------------------------- newtype MandrillT m a = MandrillT { runMandrillT :: ReaderT MandrillKey m a } deriving (MonadTrans, MonadReader MandrillKey, Functor, Applicative, Monad, MonadIO) -------------------------------------------------------------------------------- type Mandrill = MandrillT IO -------------------------------------------------------------------------------- runMandrill :: MonadIO m => MandrillKey -> MandrillT m a -> m a runMandrill key action = runReaderT (runMandrillT action) key