snap-core-0.6.0: src/Snap/Internal/Instances.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE PackageImports #-}
module Snap.Internal.Instances where
import Control.Applicative
import Control.Monad.CatchIO ()
import Control.Monad.Cont
import Control.Monad.Error
import Control.Monad.List
import Control.Monad.RWS.Strict hiding (pass)
import qualified Control.Monad.RWS.Lazy as LRWS
import Control.Monad.Reader
import Control.Monad.State.Strict
import qualified Control.Monad.State.Lazy as LState
import Control.Monad.Writer.Strict hiding (pass)
import qualified Control.Monad.Writer.Lazy as LWriter
import Prelude hiding (catch)
------------------------------------------------------------------------------
import Snap.Internal.Types
------------------------------------------------------------------------------
instance MonadPlus m => MonadPlus (ContT c m) where
mzero = lift mzero
m `mplus` n = ContT $ \ f -> runContT m f `mplus` runContT n f
------------------------------------------------------------------------------
instance MonadPlus m => Alternative (ContT c m) where
empty = mzero
(<|>) = mplus
------------------------------------------------------------------------------
instance MonadSnap m => MonadSnap (ContT c m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance (MonadSnap m, Error e) => MonadSnap (ErrorT e m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance MonadSnap m => MonadSnap (ListT m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance (MonadSnap m, Monoid w) => MonadSnap (RWST r w s m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance (MonadSnap m, Monoid w) => MonadSnap (LRWS.RWST r w s m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance MonadSnap m => MonadSnap (ReaderT r m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance MonadSnap m => MonadSnap (StateT s m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance MonadSnap m => MonadSnap (LState.StateT s m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance (MonadSnap m, Monoid w) => MonadSnap (WriterT w m) where
liftSnap = lift . liftSnap
------------------------------------------------------------------------------
instance (MonadSnap m, Monoid w) => MonadSnap (LWriter.WriterT w m) where
liftSnap = lift . liftSnap