acme-all-monad-0.1.0.0: src/Control/Monad/All/Class.hs
-- |
-- Module : Control.Monad.All.Class
-- License : Public Domain
-- Stability : stable
--
-- The @MonadAll@ type class, which represents monads which are powerful enough to interpret any monadic action.
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
-- | The @MonadAll@ class represents those monads which support every monadic action.
--
-- Instances are provided for @AllT@ and the standard monad transformers, so that you can use
-- arbitrary actions in other monad transformer stacks.
class (Monad m) => MonadAll m where
action :: a -> m b
-- | Perform an action, discarding the result.
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