log-effectful 1.0.1.0 → 1.0.2.0
raw patch · 3 files changed
+35/−4 lines, 3 filesdep ~aesonPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson
API changes (from Hackage documentation)
+ Effectful.Log: runNoLog :: forall (es :: [(Type -> Type) -> Type -> Type]) a. Eff (Log ': es) a -> Eff es a
- Effectful.Log: [GetLoggerEnv] :: Log m LoggerEnv
+ Effectful.Log: [GetLoggerEnv] :: forall (a :: Type -> Type). Log a LoggerEnv
- Effectful.Log: [LocalData] :: [Pair] -> m a -> Log m a
+ Effectful.Log: [LocalData] :: forall (a :: Type -> Type) b. [Pair] -> a b -> Log a b
- Effectful.Log: [LocalDomain] :: Text -> m a -> Log m a
+ Effectful.Log: [LocalDomain] :: forall (a :: Type -> Type) b. Text -> a b -> Log a b
- Effectful.Log: [LocalMaxLogLevel] :: LogLevel -> m a -> Log m a
+ Effectful.Log: [LocalMaxLogLevel] :: forall (a :: Type -> Type) b. LogLevel -> a b -> Log a b
- Effectful.Log: [LogMessageOp] :: LogLevel -> Text -> Value -> Log m ()
+ Effectful.Log: [LogMessageOp] :: forall (a :: Type -> Type). LogLevel -> Text -> Value -> Log a ()
- Effectful.Log: data Log :: Effect
+ Effectful.Log: data Log (a :: Type -> Type) b
- Effectful.Log: runLog :: IOE :> es => Text -> Logger -> LogLevel -> Eff (Log : es) a -> Eff es a
+ Effectful.Log: runLog :: forall (es :: [Effect]) a. IOE :> es => Text -> Logger -> LogLevel -> Eff (Log ': es) a -> Eff es a
Files
- CHANGELOG.md +4/−0
- log-effectful.cabal +2/−4
- src/Effectful/Log.hs +29/−0
CHANGELOG.md view
@@ -1,3 +1,7 @@+# log-effectful-1.0.2.0 (2026-08-11)+* Add `runNoLog`, a handler that discards all log messages without requiring+ `IOE` in the effect stack.+ # log-effectful-1.0.1.0 (2024-11-07) * Convert `Log` into a dynamically dispatched effect.
log-effectful.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0 build-type: Simple name: log-effectful-version: 1.0.1.0+version: 1.0.2.0 license: BSD-3-Clause license-file: LICENSE category: System@@ -16,7 +16,7 @@ CHANGELOG.md README.md -tested-with: GHC == { 8.10.7, 9.0.2, 9.2.8, 9.4.8, 9.6.6, 9.8.2, 9.10.1 }+tested-with: GHC == { 8.10.7, 9.0.2, 9.2.8, 9.4.8, 9.6.7, 9.8.4, 9.10.3, 9.12.4, 9.14.1 } bug-reports: https://github.com/haskell-effectful/log-effectful/issues source-repository head@@ -70,11 +70,9 @@ ghc-options: -threaded -rtsopts build-depends: base- , aeson , effectful-core , log-base , log-effectful- , text hs-source-dirs: tests
src/Effectful/Log.hs view
@@ -7,6 +7,7 @@ -- ** Handlers , runLog+ , runNoLog -- * Re-exports , module Log@@ -33,6 +34,10 @@ -- | Run the 'Log' effect. -- -- /Note:/ this is the @effectful@ version of 'runLogT'.+--+-- /Note:/ logging can be skipped by passing 'mempty' as the 'Logger', which+-- discards all messages while still requiring 'IOE'. Use 'runNoLog' instead+-- if 'IOE' is not otherwise present in the type signature. runLog :: IOE :> es => Text@@ -63,6 +68,30 @@ , leDomain = [] , leData = [] , leMaxLogLevel = maxLogLevel+ }++-- | Run the 'Log' effect by discarding all messages.+--+-- This is useful for skipping the 'Log' effect when it is present in the+-- type signature but no actual logging back-end is available, e.g. when+-- running pure code with 'runPureEff'.+runNoLog :: Eff (Log : es) a -> Eff es a+runNoLog = reinterpret reader $ \env -> \case+ LogMessageOp {} -> pure ()+ LocalData data_ action -> localSeqUnlift env $ \unlift -> do+ (`local` unlift action) $ \logEnv -> logEnv { leData = data_ ++ leData logEnv }+ LocalDomain domain action -> localSeqUnlift env $ \unlift -> do+ (`local` unlift action) $ \logEnv -> logEnv { leDomain = leDomain logEnv ++ [domain] }+ LocalMaxLogLevel level action -> localSeqUnlift env $ \unlift -> do+ (`local` unlift action) $ \logEnv -> logEnv { leMaxLogLevel = level }+ GetLoggerEnv -> ask+ where+ reader = runReader LoggerEnv+ { leLogger = mempty+ , leComponent = mempty+ , leDomain = []+ , leData = []+ , leMaxLogLevel = defaultLogLevel } -- | Orphan, canonical instance.