module Control.Monad.All.Class where
import Data.Monoid
import Control.Monad.All.Trans
import Control.Monad.Trans.Class
import Control.Monad.Trans.Identity
import Control.Monad.Trans.Except
import Control.Monad.Trans.List
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Reader
import qualified Control.Monad.Trans.State.Lazy as SL
import qualified Control.Monad.Trans.State.Strict as SS
import Control.Monad.Trans.Writer.Lazy as WL
import Control.Monad.Trans.Writer.Strict as WS
import qualified Control.Monad.Trans.RWS.Lazy as RWSL
import qualified Control.Monad.Trans.RWS.Strict as RWSS
class (Monad m) => MonadAll m where
action :: a -> m b
action_ :: (MonadAll m) => a -> m ()
action_ a = do
_ <- action a
return ()
instance MonadAll (AllT m) where
action _ = anything
instance (MonadAll m) => MonadAll (IdentityT m) where
action = lift . action
instance (MonadAll m) => MonadAll (ExceptT e m) where
action = lift . action
instance (MonadAll m) => MonadAll (ListT m) where
action = lift . action
instance (MonadAll m) => MonadAll (MaybeT m) where
action = lift . action
instance (MonadAll m) => MonadAll (ReaderT r m) where
action = lift . action
instance (MonadAll m, Monoid w) => MonadAll (WL.WriterT w m) where
action = lift . action
instance (MonadAll m, Monoid w) => MonadAll (WS.WriterT w m) where
action = lift . action
instance (MonadAll m) => MonadAll (SL.StateT s m) where
action = lift . action
instance (MonadAll m) => MonadAll (SS.StateT s m) where
action = lift . action
instance (MonadAll m, Monoid w) => MonadAll (RWSL.RWST r w s m) where
action = lift . action
instance (MonadAll m, Monoid w) => MonadAll (RWSS.RWST r w s m) where
action = lift . action