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


-- | Add prefixes to your monad-logger output
--   
--   Add prefixes to your monad-logger output
@package monad-logger-prefix
@version 0.1.11


-- | This module exports the <a>LogPrefixT</a> monad transfomer. This
--   transformer adds a given prefix to a <a>MonadLogger</a> context,
--   allowing you to make your logs a bit more greppable without including
--   much boilerplate. The prefixes can be nested easily.
--   
--   The function <a>prefixLogs</a> is the most convenient way to use the
--   library. All you have to do is use the function to add the prefix, and
--   it Just Works. Here's an example:
--   
--   <pre>
--   someLoggingFunction :: MonadLogger m =&gt; m ()
--   someLoggingFunction = do
--       $(logDebug) "No prefix here"
--       "foo" `prefixLogs` do
--           $(logDebug) "There's a [foo] there!
--           "bar" `prefixLogs` do
--               $(logDebug) "Now there's a [foo] *and* a [bar]"
--   </pre>
module Control.Monad.Logger.Prefix

-- | <a>LogPrefixT</a> is a monad transformer that prepends a bit of text
--   to each logging action in the current <a>MonadLogger</a> context. The
--   internals are currently implemented as a wrapper around <a>ReaderT</a>
--   <a>LogStr</a>.
data LogPrefixT m a

-- | This function runs the underlying <a>MonadLogger</a> instance with a
--   prefix using the <a>LogPrefixT</a> transformer.
--   
--   <pre>
--   &gt;&gt;&gt; :set -XOverloadedStrings
--   
--   &gt;&gt;&gt; let l = logDebugN "bar"
--   
--   &gt;&gt;&gt; runStdoutLoggingT (prefixLogs "foo" (logDebugN "bar\n"))
--   [Debug] [foo] bar
--   ...
--   </pre>
prefixLogs :: Text -> LogPrefixT m a -> m a
infixr 5 `prefixLogs`
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Trans.Class.MonadTrans Control.Monad.Logger.Prefix.LogPrefixT
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Logger.Prefix.LogPrefixT m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Logger.Prefix.LogPrefixT m)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Logger.MonadLogger m => Control.Monad.Logger.MonadLogger (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Trans.Control.MonadBaseControl b m => Control.Monad.Trans.Control.MonadBaseControl b (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Logger.Prefix.LogPrefixT m)
instance Control.Monad.Trans.Resource.Internal.MonadResource m => Control.Monad.Trans.Resource.Internal.MonadResource (Control.Monad.Logger.Prefix.LogPrefixT m)
