back/src/Guide/Logger/Types.hs
{-# OPTIONS_GHC -fno-warn-orphans #-} -- for "instance Read Df1.Level"
-- | The logger monad and associated types.
module Guide.Logger.Types
(
-- * Main types
HasLogger,
LoggerT, runLoggerT,
Logger,
-- * Internals
-- ** Log pieces
LogLine,
Df1.Level(..),
Df1.Path(..),
Df1.Message,
)
where
-- Shared imports
import Imports
import Di.Core
import Di.Monad
import qualified Df1
-- | Monads where logging is possible.
--
-- This is a type synonym, but you can still write @deriving HasLogger@.
type HasLogger = MonadDi Df1.Level Df1.Path Df1.Message
-- | Monad transformer that allows logging with functions in "Guide.Logger".
type LoggerT = DiT Df1.Level Df1.Path Df1.Message
-- | Execute a 'LoggerT' given an existing logger.
runLoggerT :: MonadIO m => Logger -> LoggerT m a -> m a
runLoggerT = runDiT
-- | A structure that allows logging without a 'LoggerT'.
type Logger = Di Df1.Level Df1.Path Df1.Message
-- | A single log message together with all attributes.
type LogLine = Log Df1.Level Df1.Path Df1.Message
----------------------------------------------------------------------------
-- Orphans
----------------------------------------------------------------------------
deriving instance Read Df1.Level