-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | A class of monads which can log messages.
--   
--   This package uses template-haskell for determining source code
--   locations of messages.
@package monad-logger
@version 0.3.1.1


-- | This module provides the facilities needed for a decoupled logging
--   system.
--   
--   The <a>MonadLogger</a> class is implemented by monads that give access
--   to a logging facility. If you're defining a custom monad, then you may
--   define an instance of <a>MonadLogger</a> that routes the log messages
--   to the appropriate place (e.g., that's what <tt>yesod-core</tt>'s
--   <tt>GHandler</tt> does). Otherwise, you may use the <a>LoggingT</a>
--   monad included in this module (see <a>runStderrLoggingT</a>). To
--   simply discard log message, use <a>NoLoggingT</a>.
--   
--   As a user of the logging facility, we provide you some convenient
--   Template Haskell splices that use the <a>MonadLogger</a> class. They
--   will record their source file and position, which is very helpful when
--   debugging. See <a>logDebug</a> for more information.
module Control.Monad.Logger
class Monad m => MonadLogger m
monadLoggerLog :: (MonadLogger m, ToLogStr msg) => Loc -> LogSource -> LogLevel -> msg -> m ()
data LogLevel
LevelDebug :: LogLevel
LevelInfo :: LogLevel
LevelWarn :: LogLevel
LevelError :: LogLevel
LevelOther :: Text -> LogLevel
type LogSource = Text

-- | Monad transformer that adds a new logging function.
--   
--   Since 0.2.2
newtype LoggingT m a
LoggingT :: ((Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> m a) -> LoggingT m a
runLoggingT :: LoggingT m a -> (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> m a

-- | Run a block using a <tt>MonadLogger</tt> instance which prints to
--   stderr.
--   
--   Since 0.2.2
runStderrLoggingT :: MonadIO m => LoggingT m a -> m a

-- | Run a block using a <tt>MonadLogger</tt> instance which prints to
--   stdout.
--   
--   Since 0.2.2
runStdoutLoggingT :: MonadIO m => LoggingT m a -> m a

-- | Monad transformer that disables logging.
--   
--   Since 0.2.4
newtype NoLoggingT m a
NoLoggingT :: m a -> NoLoggingT m a
runNoLoggingT :: NoLoggingT m a -> m a

-- | Generates a function that takes a <a>Text</a> and logs a
--   <a>LevelDebug</a> message. Usage:
--   
--   <pre>
--   $(logDebug) "This is a debug log message"
--   </pre>
logDebug :: Q Exp

-- | See <a>logDebug</a>
logInfo :: Q Exp

-- | See <a>logDebug</a>
logWarn :: Q Exp

-- | See <a>logDebug</a>
logError :: Q Exp

-- | Generates a function that takes a <a>Text</a> and logs a
--   <a>LevelOther</a> message. Usage:
--   
--   <pre>
--   $(logOther "My new level") "This is a log message"
--   </pre>
logOther :: Text -> Q Exp

-- | Generates a function that takes a <a>LogSource</a> and <a>Text</a> and
--   logs a <a>LevelDebug</a> message. Usage:
--   
--   <pre>
--   $logDebug "SomeSource" "This is a debug log message"
--   </pre>
logDebugS :: Q Exp

-- | See <a>logDebugS</a>
logInfoS :: Q Exp

-- | See <a>logDebugS</a>
logWarnS :: Q Exp

-- | See <a>logDebugS</a>
logErrorS :: Q Exp

-- | Generates a function that takes a <a>LogSource</a>, a level name and a
--   <a>Text</a> and logs a <a>LevelOther</a> message. Usage:
--   
--   <pre>
--   $logOther "SomeSource" "My new level" "This is a log message"
--   </pre>
logOtherS :: Q Exp

-- | Lift a location into an Exp.
--   
--   Since 0.3.1
liftLoc :: Loc -> Q Exp
instance Eq LogLevel
instance Show LogLevel
instance Read LogLevel
instance Ord LogLevel
instance MonadWriter w m => MonadWriter w (LoggingT m)
instance MonadState s m => MonadState s (LoggingT m)
instance MonadReader r m => MonadReader r (LoggingT m)
instance MonadRWS r w s m => MonadRWS r w s (LoggingT m)
instance MonadError e m => MonadError e (LoggingT m)
instance MonadCont m => MonadCont (LoggingT m)
instance MonadIO m => MonadLogger (LoggingT m)
instance MonadBaseControl b m => MonadBaseControl b (LoggingT m)
instance MonadTransControl LoggingT
instance MonadTrans LoggingT
instance MonadBase b m => MonadBase b (LoggingT m)
instance MonadResource m => MonadResource (LoggingT m)
instance MonadThrow m => MonadThrow (LoggingT m)
instance MonadIO m => MonadIO (LoggingT m)
instance Monad m => Monad (LoggingT m)
instance Monad m => Applicative (LoggingT m)
instance Monad m => Functor (LoggingT m)
instance MonadIO m => MonadLogger (NoLoggingT m)
instance MonadBaseControl b m => MonadBaseControl b (NoLoggingT m)
instance MonadTransControl NoLoggingT
instance MonadTrans NoLoggingT
instance MonadBase b m => MonadBase b (NoLoggingT m)
instance MonadResource m => MonadResource (NoLoggingT m)
instance MonadThrow m => MonadThrow (NoLoggingT m)
instance MonadIO m => MonadIO (NoLoggingT m)
instance Monad m => Monad (NoLoggingT m)
instance Monad m => Applicative (NoLoggingT m)
instance Monad m => Functor (NoLoggingT m)
instance (MonadLogger m, Monoid w) => MonadLogger (RWST r w s m)
instance (MonadLogger m, Monoid w) => MonadLogger (WriterT w m)
instance MonadLogger m => MonadLogger (StateT s m)
instance MonadLogger m => MonadLogger (ConduitM i o m)
instance MonadLogger m => MonadLogger (Pipe l i o u m)
instance MonadLogger m => MonadLogger (ResourceT m)
instance (MonadLogger m, Monoid w) => MonadLogger (RWST r w s m)
instance (MonadLogger m, Monoid w) => MonadLogger (WriterT w m)
instance MonadLogger m => MonadLogger (StateT s m)
instance MonadLogger m => MonadLogger (ContT r m)
instance MonadLogger m => MonadLogger (ReaderT r m)
instance (MonadLogger m, Error e) => MonadLogger (ErrorT e m)
instance MonadLogger m => MonadLogger (MaybeT m)
instance MonadLogger m => MonadLogger (ListT m)
instance MonadLogger m => MonadLogger (IdentityT m)
instance Lift LogLevel
