Copyright | (c) 2018-2022 Kowainik 2023-2025 Co-Log |
---|---|
License | MPL-2.0 |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Colog.Monad
Description
Core of the mtl
implementation.
Synopsis
- newtype LoggerT msg m a = LoggerT {
- runLoggerT :: ReaderT (LogAction (LoggerT msg m) msg) m a
- class HasLog env msg (m :: Type -> Type) where
- getLogAction :: env -> LogAction m msg
- setLogAction :: LogAction m msg -> env -> env
- overLogAction :: (LogAction m msg -> LogAction m msg) -> env -> env
- logActionL :: Lens' env (LogAction m msg)
- type WithLog env msg m = (MonadReader env m, HasLog env msg m, HasCallStack)
- logMsg :: forall msg env m. WithLog env msg m => msg -> m ()
- logMsgs :: forall msg env f m. (Foldable f, WithLog env msg m) => f msg -> m ()
- withLog :: WithLog env msg m => (LogAction m msg -> LogAction m msg) -> m a -> m a
- liftLogAction :: (Monad m, MonadTrans t) => LogAction m msg -> LogAction (t m) msg
- usingLoggerT :: Monad m => LogAction m msg -> LoggerT msg m a -> m a
Documentation
newtype LoggerT msg m a Source #
Constructors
LoggerT | |
Fields
|
Instances
MonadTrans (LoggerT msg) Source # | |
Defined in Colog.Monad | |
MonadFail m => MonadFail (LoggerT msg m) Source # | |
Defined in Colog.Monad | |
MonadIO m => MonadIO (LoggerT msg m) Source # | |
Defined in Colog.Monad | |
Applicative m => Applicative (LoggerT msg m) Source # | |
Defined in Colog.Monad Methods pure :: a -> LoggerT msg m a # (<*>) :: LoggerT msg m (a -> b) -> LoggerT msg m a -> LoggerT msg m b # liftA2 :: (a -> b -> c) -> LoggerT msg m a -> LoggerT msg m b -> LoggerT msg m c # (*>) :: LoggerT msg m a -> LoggerT msg m b -> LoggerT msg m b # (<*) :: LoggerT msg m a -> LoggerT msg m b -> LoggerT msg m a # | |
Functor m => Functor (LoggerT msg m) Source # | |
Monad m => Monad (LoggerT msg m) Source # | |
MonadUnliftIO m => MonadUnliftIO (LoggerT msg m) Source # | |
Defined in Colog.Monad | |
Monad m => MonadReader (LogAction (LoggerT msg m) msg) (LoggerT msg m) Source # | |
class HasLog env msg (m :: Type -> Type) where #
This types class contains simple pair of getter-setter and related
functions.
It also provides the useful lens logActionL
with the default implementation using type
class methods. The default one could be easily overritten under your instances.
Every instance of the this typeclass should satisfy the following laws:
- Set-Get:
getLogAction
(setLogAction
l env) ≡ l - Get-Set:
setLogAction
(getLogAction
env) env ≡ env - Set-Set:
setLogAction
l2 (setLogAction
l1 env) ≡setLogAction
l2 env - Set-Over:
overLogAction
f env ≡setLogAction
(f $getLogAction
env) env
Minimal complete definition
Methods
getLogAction :: env -> LogAction m msg #
Extracts LogAction
from the environment.
setLogAction :: LogAction m msg -> env -> env #
Sets LogAction
to the given one inside the environment.
overLogAction :: (LogAction m msg -> LogAction m msg) -> env -> env #
Applies function to the LogAction
inside the environment.
logActionL :: Lens' env (LogAction m msg) #
Lens for LogAction
inside the environment.
Instances
HasLog (LogAction m msg) msg m | |
Defined in Colog.Core.Class Methods getLogAction :: LogAction m msg -> LogAction m msg # setLogAction :: LogAction m msg -> LogAction m msg -> LogAction m msg # overLogAction :: (LogAction m msg -> LogAction m msg) -> LogAction m msg -> LogAction m msg # logActionL :: Lens' (LogAction m msg) (LogAction m msg) # |
type WithLog env msg m = (MonadReader env m, HasLog env msg m, HasCallStack) Source #
Type alias for constraint for:
- Monad
m
have access to environmentenv
. - Environment
env
containsLogAction
that can log messages of typemsg
. - Function call stack.
If you use this constraint, function call stack will be propagated and you will have access to code lines that log messages.
logMsgs :: forall msg env f m. (Foldable f, WithLog env msg m) => f msg -> m () Source #
Logs multiple messages.
liftLogAction :: (Monad m, MonadTrans t) => LogAction m msg -> LogAction (t m) msg Source #
Lifts LogAction
by allowing to log in a transformed monad.
usingLoggerT :: Monad m => LogAction m msg -> LoggerT msg m a -> m a Source #
Runner for LoggerT
monad. Let's consider one simple example of monadic
action you have:
app ::WithLog
envString
m => m () app = dologMsg
"Starting application..."withLog
(cmap
("app:" ++)) $ dologMsg
"Application started."logMsg
"Application finished."
You can use the following way of running such example:
usingLoggerT
(LogAction
putStrLn
) app
And you will see this output:
Starting application... app:Application started. app:Application finished.