{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_HADDOCK show-extensions #-}
module Network.Mail.Assumpta.Instances
where
import Control.Monad.Reader
import Control.Monad.State
import Control.Monad.Trans.Class (lift)
import Control.Monad.Writer
import Network.Mail.Assumpta.Trans.Smtp
instance MonadWriter w m => MonadWriter w (SmtpT conn m) where
writer = lift . writer
tell = lift . tell
listen (SmtpT m) = SmtpT $ listen m
pass (SmtpT m) = SmtpT $ pass m
instance (MonadReader r m) => MonadReader r (SmtpT conn m) where
ask = liftSmtpT ask
local = mapSmtpT . local
instance MonadState s m => MonadState s (SmtpT conn m) where
get = lift get
put = lift . put
state = lift . state