polysemy-log 0.2.2.4 → 0.3.0.0
raw patch · 8 files changed
+202/−84 lines, 8 filesdep −hedgehogdep −tasty-hedgehogdep ~polysemy-concdep ~polysemy-timePVP ok
version bump matches the API change (PVP)
Dependencies removed: hedgehog, tasty-hedgehog
Dependency ranges changed: polysemy-conc, polysemy-time
API changes (from Hackage documentation)
- Polysemy.Log.Log: interpretDataLogStderr :: Show a => Member (Embed IO) r => InterpreterFor (DataLog a) r
- Polysemy.Log.Log: interpretDataLogStderrWith :: Member (Embed IO) r => (a -> Text) -> InterpreterFor (DataLog a) r
- Polysemy.Log.Log: interpretLogStderr :: Members [Embed IO, GhcTime] r => InterpreterFor Log r
- Polysemy.Log.Log: interpretLogStderr' :: Member (Embed IO) r => InterpreterFor Log r
- Polysemy.Log.Log: interpretLogStderrWith :: Members [Embed IO, GhcTime] r => (LogEntry LogMessage -> Text) -> InterpreterFor Log r
+ Polysemy.Log: interpretDataLogStdout :: Show a => Member (Embed IO) r => InterpreterFor (DataLog a) r
+ Polysemy.Log: interpretDataLogStdoutWith :: Member (Embed IO) r => (a -> Text) -> InterpreterFor (DataLog a) r
+ Polysemy.Log: interpretLogStdout :: Members [Embed IO, GhcTime] r => InterpreterFor Log r
+ Polysemy.Log: interpretLogStdout' :: Member (Embed IO) r => InterpreterFor Log r
+ Polysemy.Log: interpretLogStdoutWith :: Members [Embed IO, GhcTime] r => (LogEntry LogMessage -> Text) -> InterpreterFor Log r
+ Polysemy.Log.Stderr: interpretDataLogStderr :: Show a => Member (Embed IO) r => InterpreterFor (DataLog a) r
+ Polysemy.Log.Stderr: interpretDataLogStderrWith :: Member (Embed IO) r => (a -> Text) -> InterpreterFor (DataLog a) r
+ Polysemy.Log.Stderr: interpretLogStderr :: Members [Embed IO, GhcTime] r => InterpreterFor Log r
+ Polysemy.Log.Stderr: interpretLogStderr' :: Member (Embed IO) r => InterpreterFor Log r
+ Polysemy.Log.Stderr: interpretLogStderrConc :: Members [Resource, Async, Race, Embed IO] r => InterpreterFor Log r
+ Polysemy.Log.Stderr: interpretLogStderrWith :: Members [Embed IO, GhcTime] r => (LogEntry LogMessage -> Text) -> InterpreterFor Log r
+ Polysemy.Log.Stdout: interpretDataLogStdout :: Show a => Member (Embed IO) r => InterpreterFor (DataLog a) r
+ Polysemy.Log.Stdout: interpretDataLogStdoutWith :: Member (Embed IO) r => (a -> Text) -> InterpreterFor (DataLog a) r
+ Polysemy.Log.Stdout: interpretLogStdout :: Members [Embed IO, GhcTime] r => InterpreterFor Log r
+ Polysemy.Log.Stdout: interpretLogStdout' :: Member (Embed IO) r => InterpreterFor Log r
+ Polysemy.Log.Stdout: interpretLogStdoutConc :: Members [Resource, Async, Race, Embed IO] r => InterpreterFor Log r
+ Polysemy.Log.Stdout: interpretLogStdoutWith :: Members [Embed IO, GhcTime] r => (LogEntry LogMessage -> Text) -> InterpreterFor Log r
Files
- changelog.md +9/−1
- lib/Polysemy/Log.hs +22/−8
- lib/Polysemy/Log/Log.hs +4/−57
- lib/Polysemy/Log/Prelude.hs +1/−1
- lib/Polysemy/Log/Stderr.hs +77/−0
- lib/Polysemy/Log/Stdout.hs +77/−0
- polysemy-log.cabal +11/−16
- test/Polysemy/Log/Test/LogEntryTest.hs +1/−1
changelog.md view
@@ -1,5 +1,13 @@+# Unreleased++# 0.3.0.0++* Add concurrent interpreters for stdout and stderr.+* Add stdout interpreters.+ # 0.2.1.0-* add naive stderr interpreters for `DataLog` and `Log`.++* Add naive stderr interpreters for `DataLog` and `Log`. # 0.2.0.0
lib/Polysemy/Log.hs view
@@ -14,6 +14,8 @@ -- ** Interpreters interpretDataLogStderrWith, interpretDataLogStderr,+ interpretDataLogStdoutWith,+ interpretDataLogStdout, interpretDataLogAtomic', interpretDataLogAtomic, @@ -36,6 +38,9 @@ interpretLogStderrWith, interpretLogStderr, interpretLogStderr',+ interpretLogStdoutWith,+ interpretLogStdout,+ interpretLogStdout', interpretLogDataLog, interpretLogDataLog', interpretLogOutput,@@ -50,23 +55,32 @@ import Polysemy.Log.Atomic (interpretDataLogAtomic, interpretDataLogAtomic', interpretLogAtomic, interpretLogAtomic') import Polysemy.Log.Conc (interceptDataLogConc)-import Polysemy.Log.Data.DataLog (DataLog(DataLog), dataLog)-import Polysemy.Log.Data.Log (Log(Log), crit, debug, error, info, log, trace, warn)-import Polysemy.Log.Data.LogEntry (LogEntry(LogEntry))-import Polysemy.Log.Data.LogMessage (LogMessage(LogMessage))-import Polysemy.Log.Data.Severity (Severity(..))+import Polysemy.Log.Data.DataLog (DataLog (DataLog), dataLog)+import Polysemy.Log.Data.Log (Log (Log), crit, debug, error, info, log, trace, warn)+import Polysemy.Log.Data.LogEntry (LogEntry (LogEntry))+import Polysemy.Log.Data.LogMessage (LogMessage (LogMessage))+import Polysemy.Log.Data.Severity (Severity (..)) import Polysemy.Log.Format (formatLogEntry) import Polysemy.Log.Log ( interpretLogDataLog, interpretLogDataLog', interpretLogDataLogConc,- interpretDataLogStderrWith,+ )+import Polysemy.Log.Pure (interpretLogNull, interpretLogOutput)+import Polysemy.Log.Stderr ( interpretDataLogStderr,- interpretLogStderrWith,+ interpretDataLogStderrWith, interpretLogStderr, interpretLogStderr',+ interpretLogStderrWith, )-import Polysemy.Log.Pure (interpretLogNull, interpretLogOutput)+import Polysemy.Log.Stdout (+ interpretDataLogStdout,+ interpretDataLogStdoutWith,+ interpretLogStdout,+ interpretLogStdout',+ interpretLogStdoutWith,+ ) -- $intro -- There are at least two libraries that wrap a logging backend with polysemy interpreters.
lib/Polysemy/Log/Log.hs view
@@ -1,7 +1,6 @@ -- |Description: Internal module Polysemy.Log.Log where -import qualified Data.Text.IO as Text import Polysemy (interpretH, runT) import Polysemy.Async (Async) import Polysemy.Conc (Race)@@ -11,12 +10,11 @@ import Polysemy.Time (GhcTime, interpretTimeGhc) import Polysemy.Log.Conc (interceptDataLogConc)-import Polysemy.Log.Data.DataLog (DataLog(DataLog, Local), dataLog)-import Polysemy.Log.Data.Log (Log(Log))+import Polysemy.Log.Data.DataLog (DataLog (DataLog, Local), dataLog)+import Polysemy.Log.Data.Log (Log (Log)) import Polysemy.Log.Data.LogEntry (LogEntry, annotate) import Polysemy.Log.Data.LogMessage (LogMessage)-import Polysemy.Log.Data.LogMetadata (LogMetadata(Annotated), annotated)-import Polysemy.Log.Format (formatLogEntry)+import Polysemy.Log.Data.LogMetadata (LogMetadata (Annotated), annotated) -- |Interpret 'Log' into the intermediate internal effect 'LogMetadata'. interpretLogLogMetadata ::@@ -80,7 +78,7 @@ raiseUnder2 {-# INLINE interpretLogDataLogConc #-} --- |Helper for maintaining context function as state that is applied to each logged message, allowing the context of a+-- |Helper for maintaining a context function as state that is applied to each logged message, allowing the context of a -- block to be modified. interpretDataLogLocal :: ∀ a r .@@ -102,54 +100,3 @@ InterpreterFor (DataLog a) r interpretDataLog = interpretDataLogLocal id---- |Interpret 'DataLog' by printing to stderr, converting messages to 'Text' with the supplied function.-interpretDataLogStderrWith ::- Member (Embed IO) r =>- (a -> Text) ->- InterpreterFor (DataLog a) r-interpretDataLogStderrWith fmt =- interpretDataLog \ msg -> embed (Text.hPutStrLn stderr (fmt msg))-{-# INLINE interpretDataLogStderrWith #-}---- |Interpret 'DataLog' by printing to stderr, converting messages to 'Text' by using 'Show'.-interpretDataLogStderr ::- Show a =>- Member (Embed IO) r =>- InterpreterFor (DataLog a) r-interpretDataLogStderr =- interpretDataLogStderrWith show-{-# INLINE interpretDataLogStderr #-}---- |Interpret 'Log' by printing to stderr, converting messages to 'Text' with the supplied function.-interpretLogStderrWith ::- Members [Embed IO, GhcTime] r =>- (LogEntry LogMessage -> Text) ->- InterpreterFor Log r-interpretLogStderrWith fmt =- interpretDataLogStderrWith fmt .- interpretTimeGhc .- interpretLogDataLog .- raiseUnder2-{-# INLINE interpretLogStderrWith #-}---- |Interpret 'Log' by printing to stderr, using the default formatter.------ Since this adds a timestamp, it has a dependency on 'GhcTime'.--- Use 'interpretLogStderr'' for a variant that interprets 'GhcTime' in-place.-interpretLogStderr ::- Members [Embed IO, GhcTime] r =>- InterpreterFor Log r-interpretLogStderr =- interpretLogStderrWith formatLogEntry-{-# INLINE interpretLogStderr #-}---- |Interpret 'Log' by printing to stderr, using the default formatter, then interpreting 'GhcTime'.-interpretLogStderr' ::- Member (Embed IO) r =>- InterpreterFor Log r-interpretLogStderr' =- interpretTimeGhc .- interpretLogStderr .- raiseUnder-{-# INLINE interpretLogStderr' #-}
lib/Polysemy/Log/Prelude.hs view
@@ -1,5 +1,5 @@ {-# options_haddock hide #-}-{-# LANGUAGE NoImplicitPrelude #-}+{-# language NoImplicitPrelude #-} module Polysemy.Log.Prelude ( module Polysemy.Log.Prelude,
+ lib/Polysemy/Log/Stderr.hs view
@@ -0,0 +1,77 @@+-- |Description: Internal+module Polysemy.Log.Stderr where++import qualified Data.Text.IO as Text+import Polysemy.Async (Async)+import Polysemy.Conc (Race)+import Polysemy.Resource (Resource)+import Polysemy.Time (GhcTime, interpretTimeGhc)++import Polysemy.Log.Data.DataLog (DataLog)+import Polysemy.Log.Data.Log (Log)+import Polysemy.Log.Data.LogEntry (LogEntry)+import Polysemy.Log.Data.LogMessage (LogMessage)+import Polysemy.Log.Format (formatLogEntry)+import Polysemy.Log.Log (interpretDataLog, interpretLogDataLog, interpretLogDataLogConc)++-- |Interpret 'DataLog' by printing to stderr, converting messages to 'Text' with the supplied function.+interpretDataLogStderrWith ::+ Member (Embed IO) r =>+ (a -> Text) ->+ InterpreterFor (DataLog a) r+interpretDataLogStderrWith fmt =+ interpretDataLog \ msg -> embed (Text.hPutStrLn stderr (fmt msg))+{-# INLINE interpretDataLogStderrWith #-}++-- |Interpret 'DataLog' by printing to stderr, converting messages to 'Text' by using 'Show'.+interpretDataLogStderr ::+ Show a =>+ Member (Embed IO) r =>+ InterpreterFor (DataLog a) r+interpretDataLogStderr =+ interpretDataLogStderrWith show+{-# INLINE interpretDataLogStderr #-}++-- |Interpret 'Log' by printing to stderr, converting messages to 'Text' with the supplied function.+interpretLogStderrWith ::+ Members [Embed IO, GhcTime] r =>+ (LogEntry LogMessage -> Text) ->+ InterpreterFor Log r+interpretLogStderrWith fmt =+ interpretDataLogStderrWith fmt .+ interpretTimeGhc .+ interpretLogDataLog .+ raiseUnder2+{-# INLINE interpretLogStderrWith #-}++-- |Interpret 'Log' by printing to stderr, using the default formatter.+--+-- Since this adds a timestamp, it has a dependency on 'GhcTime'.+-- Use 'interpretLogStderr'' for a variant that interprets 'GhcTime' in-place.+interpretLogStderr ::+ Members [Embed IO, GhcTime] r =>+ InterpreterFor Log r+interpretLogStderr =+ interpretLogStderrWith formatLogEntry+{-# INLINE interpretLogStderr #-}++-- |Interpret 'Log' by printing to stderr, using the default formatter, then interpreting 'GhcTime'.+interpretLogStderr' ::+ Member (Embed IO) r =>+ InterpreterFor Log r+interpretLogStderr' =+ interpretTimeGhc .+ interpretLogStderr .+ raiseUnder+{-# INLINE interpretLogStderr' #-}++-- |Like 'interpretLogStderr', but process messages concurrently.+interpretLogStderrConc ::+ Members [Resource, Async, Race, Embed IO] r =>+ InterpreterFor Log r+interpretLogStderrConc =+ interpretTimeGhc .+ interpretDataLogStderrWith formatLogEntry .+ interpretLogDataLogConc 64 .+ raiseUnder2+{-# INLINE interpretLogStderrConc #-}
+ lib/Polysemy/Log/Stdout.hs view
@@ -0,0 +1,77 @@+-- |Description: Internal+module Polysemy.Log.Stdout where++import qualified Data.Text.IO as Text+import Polysemy.Async (Async)+import Polysemy.Conc (Race)+import Polysemy.Resource (Resource)+import Polysemy.Time (GhcTime, interpretTimeGhc)++import Polysemy.Log.Data.DataLog (DataLog)+import Polysemy.Log.Data.Log (Log)+import Polysemy.Log.Data.LogEntry (LogEntry)+import Polysemy.Log.Data.LogMessage (LogMessage)+import Polysemy.Log.Format (formatLogEntry)+import Polysemy.Log.Log (interpretDataLog, interpretLogDataLog, interpretLogDataLogConc)++-- |Interpret 'DataLog' by printing to stderr, converting messages to 'Text' with the supplied function.+interpretDataLogStdoutWith ::+ Member (Embed IO) r =>+ (a -> Text) ->+ InterpreterFor (DataLog a) r+interpretDataLogStdoutWith fmt =+ interpretDataLog \ msg -> embed (Text.hPutStrLn stderr (fmt msg))+{-# INLINE interpretDataLogStdoutWith #-}++-- |Interpret 'DataLog' by printing to stderr, converting messages to 'Text' by using 'Show'.+interpretDataLogStdout ::+ Show a =>+ Member (Embed IO) r =>+ InterpreterFor (DataLog a) r+interpretDataLogStdout =+ interpretDataLogStdoutWith show+{-# INLINE interpretDataLogStdout #-}++-- |Interpret 'Log' by printing to stderr, converting messages to 'Text' with the supplied function.+interpretLogStdoutWith ::+ Members [Embed IO, GhcTime] r =>+ (LogEntry LogMessage -> Text) ->+ InterpreterFor Log r+interpretLogStdoutWith fmt =+ interpretDataLogStdoutWith fmt .+ interpretTimeGhc .+ interpretLogDataLog .+ raiseUnder2+{-# INLINE interpretLogStdoutWith #-}++-- |Interpret 'Log' by printing to stderr, using the default formatter.+--+-- Since this adds a timestamp, it has a dependency on 'GhcTime'.+-- Use 'interpretLogStdout'' for a variant that interprets 'GhcTime' in-place.+interpretLogStdout ::+ Members [Embed IO, GhcTime] r =>+ InterpreterFor Log r+interpretLogStdout =+ interpretLogStdoutWith formatLogEntry+{-# INLINE interpretLogStdout #-}++-- |Interpret 'Log' by printing to stderr, using the default formatter, then interpreting 'GhcTime'.+interpretLogStdout' ::+ Member (Embed IO) r =>+ InterpreterFor Log r+interpretLogStdout' =+ interpretTimeGhc .+ interpretLogStdout .+ raiseUnder+{-# INLINE interpretLogStdout' #-}++-- |Like 'interpretLogStdout', but process messages concurrently.+interpretLogStdoutConc ::+ Members [Resource, Async, Race, Embed IO] r =>+ InterpreterFor Log r+interpretLogStdoutConc =+ interpretTimeGhc .+ interpretDataLogStdoutWith formatLogEntry .+ interpretLogDataLogConc 64 .+ raiseUnder2+{-# INLINE interpretLogStdoutConc #-}
polysemy-log.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: polysemy-log-version: 0.2.2.4+version: 0.3.0.0 synopsis: Polysemy Effects for Logging description: See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html> category: Logging@@ -40,6 +40,8 @@ Polysemy.Log.Log Polysemy.Log.Prelude Polysemy.Log.Pure+ Polysemy.Log.Stderr+ Polysemy.Log.Stdout other-modules: Prelude Paths_polysemy_log@@ -105,13 +107,13 @@ UndecidableInstances UnicodeSyntax ViewPatterns- ghc-options: -flate-specialise -fspecialise-aggressively -Wall -Wredundant-constraints+ ghc-options: -flate-specialise -fspecialise-aggressively -Wall -Wredundant-constraints -Wunused-packages build-depends: ansi-terminal >=0.10.3 , base ==4.* , polysemy >=1.5- , polysemy-conc >=0.1.0.0- , polysemy-time >=0.1.1.0+ , polysemy-conc >=0.3+ , polysemy-time >=0.1.4 , relude >=0.7 , string-interpolate >=0.2.1 , template-haskell@@ -191,25 +193,18 @@ UndecidableInstances UnicodeSyntax ViewPatterns- ghc-options: -flate-specialise -fspecialise-aggressively -Wall -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N+ ghc-options: -flate-specialise -fspecialise-aggressively -Wall -Wredundant-constraints -Wunused-packages -threaded -rtsopts -with-rtsopts=-N build-depends:- ansi-terminal >=0.10.3- , base ==4.*- , hedgehog+ base ==4.* , polysemy >=1.5- , polysemy-conc >=0.1.0.0+ , polysemy-conc , polysemy-log , polysemy-test- , polysemy-time >=0.1.1.0- , relude >=0.7- , string-interpolate >=0.2.1+ , polysemy-time , tasty- , tasty-hedgehog- , template-haskell- , text , time mixins: base hiding (Prelude)- , polysemy-log hiding (Prelude)+ , polysemy-log hiding (Polysemy.Log.Prelude) , polysemy-log (Polysemy.Log.Prelude as Prelude) default-language: Haskell2010
test/Polysemy/Log/Test/LogEntryTest.hs view
@@ -8,7 +8,7 @@ import qualified Polysemy.Log.Data.LogEntry as LogEntry import Polysemy.Log.Data.LogEntry (LogEntry) import Polysemy.Log.Data.LogMessage (LogMessage (LogMessage))-import Polysemy.Log.Data.Severity (Severity(Crit, Debug))+import Polysemy.Log.Data.Severity (Severity (Crit, Debug)) import Polysemy.Log.Format (formatCaller) import Polysemy.Log.Log (interpretLogDataLog')