| Copyright | (c) 2018-2022 Kowainik |
|---|---|
| License | MPL-2.0 |
| Maintainer | Kowainik <xrom.xkov@gmail.com> |
| Safe Haskell | None |
| 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 | |
| Monad m => Monad (LoggerT msg m) Source # | |
| Functor m => Functor (LoggerT msg m) Source # | |
| 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 # | |
| MonadIO m => MonadIO (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(setLogActionl env) ≡ l - Get-Set:
setLogAction(getLogActionenv) env ≡ env - Set-Set:
setLogActionl2 (setLogActionl1 env) ≡setLogActionl2 env - Set-Over:
overLogActionf env ≡setLogAction(f $getLogActionenv) 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
mhave access to environmentenv. - Environment
envcontainsLogActionthat 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 ::WithLogenvStringm => 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(LogActionputStrLn) app
And you will see this output:
Starting application... app:Application started. app:Application finished.