polysemy-log 0.4.3.0 → 0.5.0.0
raw patch · 20 files changed
+78/−199 lines, 20 filesdep +incipit-coredep +polysemy-plugindep +stmdep −reludedep −template-haskelldep −textdep ~polysemy-concdep ~polysemy-timesetup-changedPVP ok
version bump matches the API change (PVP)
Dependencies added: incipit-core, polysemy-plugin, stm
Dependencies removed: relude, template-haskell, text
Dependency ranges changed: polysemy-conc, polysemy-time
API changes (from Hackage documentation)
+ Polysemy.Log.Data.LogMetadata: annotated :: HasCallStack => Member (LogMetadata msg) r => msg -> Sem r ()
Files
- Setup.hs +2/−0
- lib/Polysemy/Log/Atomic.hs +7/−7
- lib/Polysemy/Log/Conc.hs +4/−6
- lib/Polysemy/Log/Data/DataLog.hs +2/−2
- lib/Polysemy/Log/Data/Log.hs +2/−2
- lib/Polysemy/Log/Data/LogEntry.hs +1/−0
- lib/Polysemy/Log/Data/LogMetadata.hs +1/−3
- lib/Polysemy/Log/Format.hs +1/−1
- lib/Polysemy/Log/Handle.hs +1/−6
- lib/Polysemy/Log/Level.hs +1/−1
- lib/Polysemy/Log/Log.hs +1/−4
- lib/Polysemy/Log/Prelude.hs +0/−57
- lib/Polysemy/Log/Pure.hs +2/−4
- lib/Polysemy/Log/Stderr.hs +1/−2
- lib/Polysemy/Log/Stdout.hs +1/−2
- lib/Prelude.hs +0/−5
- polysemy-log.cabal +9/−16
- readme.md +4/−79
- test/Polysemy/Log/Test/ConcTest.hs +1/−2
- test/Polysemy/Log/Test/ExampleTest.hs +37/−0
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
lib/Polysemy/Log/Atomic.hs view
@@ -1,10 +1,10 @@--- |Description: Internal+-- |Description: Interpreters for 'DataLog' that write to 'AtomicState'. module Polysemy.Log.Atomic where -import Polysemy.Internal (InterpretersFor)+import Control.Concurrent.STM (newTVarIO) import Polysemy.Log.Data.DataLog (DataLog)-import Polysemy.Log.Data.Log (Log(Log))+import Polysemy.Log.Data.Log (Log (Log)) import Polysemy.Log.Data.LogMessage (LogMessage) import Polysemy.Log.Log (interpretDataLog) @@ -18,13 +18,13 @@ {-# inline interpretDataLogAtomic' #-} -- |Interpret 'DataLog' by prepending each message to a list in an 'AtomicState', then interpret the 'AtomicState' in a--- 'TVar'.+-- 'Control.Concurrent.STM.TVar'. interpretDataLogAtomic :: ∀ a r . Member (Embed IO) r => InterpretersFor [DataLog a, AtomicState [a]] r interpretDataLogAtomic sem = do- tv <- newTVarIO []+ tv <- embed (newTVarIO []) runAtomicStateTVar tv (interpretDataLogAtomic' sem) {-# inline interpretDataLogAtomic #-} @@ -38,11 +38,11 @@ {-# inline interpretLogAtomic' #-} -- |Interpret 'Log' by prepending each message to a list in an 'AtomicState', then interpret the 'AtomicState' in a--- 'TVar'.+-- 'Control.Concurrent.STM.TVar'. interpretLogAtomic :: Member (Embed IO) r => InterpretersFor [Log, AtomicState [LogMessage]] r interpretLogAtomic sem = do- tv <- newTVarIO []+ tv <- embed (newTVarIO []) runAtomicStateTVar tv (interpretLogAtomic' sem) {-# inline interpretLogAtomic #-}
lib/Polysemy/Log/Conc.hs view
@@ -1,19 +1,17 @@ -- |Description: Internal module Polysemy.Log.Conc where -import Polysemy (interceptH, runT, subsume)-import Polysemy.Async (Async, async, await)+import qualified Control.Concurrent.Async as Base+import qualified Polysemy.Conc as Conc import Polysemy.Conc (Queue, Race, interpretQueueTBM) import qualified Polysemy.Conc.Queue as Queue import Polysemy.Conc.Queue.Result (resultToMaybe) import Polysemy.Internal.Tactics (liftT)-import Polysemy.Resource (Resource, finally)+import Polysemy.Time (Seconds (Seconds))+import Prelude hiding (Local) import qualified Polysemy.Log.Data.DataLog as DataLog import Polysemy.Log.Data.DataLog (DataLog (DataLog, Local))-import qualified Control.Concurrent.Async as Base-import qualified Polysemy.Conc as Conc-import Polysemy.Time (Seconds(Seconds)) -- |Intercept 'DataLog' for concurrent processing. -- This does not send any action to the ultimate interpreter but writes all log messages to the provided queue.
lib/Polysemy/Log/Data/DataLog.hs view
@@ -3,7 +3,7 @@ -- |Description: Internal module Polysemy.Log.Data.DataLog where -import Polysemy.Internal (send)+import GHC.Stack (withFrozenCallStack) import Polysemy.Time (GhcTime) import Polysemy.Log.Data.LogEntry (LogEntry, annotate)@@ -79,7 +79,7 @@ withFrozenCallStack (log Warn) {-# inline warn #-} --- |Log a text message with the 'Error' severity.+-- |Log a text message with the 'Polysemy.Log.Data.Severity.Error' severity. error :: HasCallStack => Members [Logger, GhcTime] r =>
lib/Polysemy/Log/Data/Log.hs view
@@ -1,7 +1,7 @@ -- |Description: Internal module Polysemy.Log.Data.Log where -import Polysemy.Internal (send)+import GHC.Stack (withFrozenCallStack) import Polysemy.Log.Data.LogMessage (LogMessage (LogMessage)) import Polysemy.Log.Data.Severity (Severity (Crit, Debug, Error, Info, Trace, Warn))@@ -79,7 +79,7 @@ log Warn {-# inline warn #-} --- |Log a message with the 'Error' severity.+-- |Log a message with the 'Polysemy.Log.Data.Severity.Error' severity. error :: HasCallStack => Member Log r =>
lib/Polysemy/Log/Data/LogEntry.hs view
@@ -3,6 +3,7 @@ import Data.Time (UTCTime) import Data.Time.Calendar (Day)+import GHC.Stack (CallStack, callStack) import qualified Polysemy.Time as Time import Polysemy.Time (GhcTime)
lib/Polysemy/Log/Data/LogMetadata.hs view
@@ -1,9 +1,6 @@ -- |Description: Internal-{-# options_haddock prune #-} module Polysemy.Log.Data.LogMetadata where -import Polysemy.Internal (send)- -- |Internal effect used as an intermediate stage between 'Polysemy.Log.Log' and 'Polysemy.Log.DataLog', for the purpose -- of isolating the metadata annotation task. --@@ -13,6 +10,7 @@ -- |Schedule a message to be annotated and logged. Annotated :: HasCallStack => msg -> LogMetadata msg m () +-- |Schedule a message to be annotated and logged. annotated :: HasCallStack => Member (LogMetadata msg) r =>
lib/Polysemy/Log/Format.hs view
@@ -2,7 +2,7 @@ module Polysemy.Log.Format where import qualified Data.Text as Text-import GHC.Exception (SrcLoc (..))+import GHC.Exception (CallStack, SrcLoc (..), getCallStack) import System.Console.ANSI (Color (..), ColorIntensity (Dull), ConsoleLayer (Foreground), SGR (..), setSGRCode) import Polysemy.Log.Data.LogEntry (LogEntry (LogEntry))
lib/Polysemy/Log/Handle.hs view
@@ -1,16 +1,11 @@-{-# language CPP #-}- -- |Description: Handle Interpreters, Internal module Polysemy.Log.Handle where import qualified Data.Text.IO as Text+import System.IO (BufferMode (LineBuffering), Handle, hSetBuffering) import Polysemy.Log.Data.DataLog (DataLog) import Polysemy.Log.Log (interpretDataLog)--#if !MIN_VERSION_relude(1,0,0)-import System.IO (hSetBuffering, BufferMode (LineBuffering))-#endif -- |Interpret 'DataLog' by printing to the given handle, converting messages to 'Text' with the supplied function. -- Sets the handle into 'LineBuffering' mode.
lib/Polysemy/Log/Level.hs view
@@ -1,7 +1,7 @@ -- |Description: Internal module Polysemy.Log.Level where -import Polysemy (interceptH, runTSimple)+import Prelude hiding (Local) import qualified Polysemy.Log.Data.DataLog as DataLog import Polysemy.Log.Data.DataLog (DataLog (DataLog, Local))
lib/Polysemy/Log/Log.hs view
@@ -1,13 +1,10 @@ -- |Description: Internal module Polysemy.Log.Log where -import Polysemy (interpretH, runT)-import Polysemy.Async (Async) import Polysemy.Conc (Race)-import Polysemy.Internal (InterpretersFor) import Polysemy.Internal.Tactics (liftT)-import Polysemy.Resource (Resource) import Polysemy.Time (GhcTime, interpretTimeGhc)+import Prelude hiding (Local) import Polysemy.Log.Conc (interceptDataLogConc) import Polysemy.Log.Data.DataLog (DataLog (DataLog, Local), dataLog)
− lib/Polysemy/Log/Prelude.hs
@@ -1,57 +0,0 @@-{-# options_haddock hide #-}-{-# language NoImplicitPrelude #-}--module Polysemy.Log.Prelude (- module GHC.Err,- module Polysemy,- module Polysemy.AtomicState,- module Relude,-) where--import GHC.Err (undefined)-import Polysemy (- Effect,- EffectRow,- Embed,- Final,- InterpreterFor,- Member,- Members,- Sem,- WithTactics,- embed,- embedToFinal,- interpret,- makeSem,- pureT,- raise,- raiseUnder,- raiseUnder2,- raiseUnder3,- reinterpret,- runFinal,- )-import Polysemy.AtomicState (AtomicState, atomicGet, atomicGets, atomicModify', atomicPut, runAtomicStateTVar)-import Relude hiding (- Reader,- State,- Sum,- Type,- ask,- asks,- evalState,- filterM,- get,- gets,- hoistEither,- modify,- modify',- put,- readFile,- runReader,- runState,- state,- trace,- traceShow,- undefined,- )
lib/Polysemy/Log/Pure.hs view
@@ -1,9 +1,7 @@--- |Description: Internal+-- |Description: Pure interpreters for 'Log'. module Polysemy.Log.Pure where -import Polysemy.Output (Output, output)--import Polysemy.Log.Data.Log (Log(Log))+import Polysemy.Log.Data.Log (Log (Log)) import Polysemy.Log.Data.LogMessage (LogMessage) -- |Interpret 'Log' in terms of 'Output'.
lib/Polysemy/Log/Stderr.hs view
@@ -1,10 +1,9 @@ -- |Description: Stderr Interpreters, Internal module Polysemy.Log.Stderr where -import Polysemy.Async (Async) import Polysemy.Conc (Race)-import Polysemy.Resource (Resource) import Polysemy.Time (GhcTime, interpretTimeGhc)+import System.IO (stderr) import Polysemy.Log.Data.DataLog (DataLog) import Polysemy.Log.Data.Log (Log)
lib/Polysemy/Log/Stdout.hs view
@@ -1,10 +1,9 @@ -- |Description: Stdout Interpreters, Internal module Polysemy.Log.Stdout where -import Polysemy.Async (Async) import Polysemy.Conc (Race)-import Polysemy.Resource (Resource) import Polysemy.Time (GhcTime, interpretTimeGhc)+import System.IO (stdout) import Polysemy.Log.Data.DataLog (DataLog) import Polysemy.Log.Data.Log (Log)
− lib/Prelude.hs
@@ -1,5 +0,0 @@-module Prelude (- module Polysemy.Log.Prelude,-) where--import Polysemy.Log.Prelude
polysemy-log.cabal view
@@ -1,11 +1,11 @@ cabal-version: 2.2 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.34.6. -- -- see: https://github.com/sol/hpack name: polysemy-log-version: 0.4.3.0+version: 0.5.0.0 synopsis: Polysemy Effects for Logging description: See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html> category: Logging@@ -40,15 +40,9 @@ Polysemy.Log.Handle Polysemy.Log.Level Polysemy.Log.Log- Polysemy.Log.Prelude Polysemy.Log.Pure Polysemy.Log.Stderr Polysemy.Log.Stdout- other-modules:- Prelude- Paths_polysemy_log- autogen-modules:- Paths_polysemy_log hs-source-dirs: lib default-extensions:@@ -114,12 +108,11 @@ ansi-terminal >=0.10.3 , async , base ==4.*+ , incipit-core >=0.1.0.1 , polysemy >=1.5- , polysemy-conc >=0.3- , polysemy-time >=0.1.4- , relude >=0.7- , template-haskell- , text+ , polysemy-conc >=0.6+ , polysemy-time >=0.3+ , stm , time mixins: base hiding (Prelude)@@ -131,10 +124,10 @@ other-modules: Polysemy.Log.Test.ConcTest Polysemy.Log.Test.DataLogTest+ Polysemy.Log.Test.ExampleTest Polysemy.Log.Test.LocalTest Polysemy.Log.Test.LogEntryTest Polysemy.Log.Test.SimpleTest- Paths_polysemy_log hs-source-dirs: test default-extensions:@@ -198,15 +191,15 @@ ghc-options: -Wall -Wredundant-constraints -Wunused-packages -Widentities -threaded -rtsopts -with-rtsopts=-N build-depends: base ==4.*+ , incipit-core >=0.1.0.1 , polysemy >=1.5 , polysemy-conc , polysemy-log+ , polysemy-plugin , polysemy-test , polysemy-time , tasty , time mixins: base hiding (Prelude)- , polysemy-log hiding (Polysemy.Log.Prelude)- , polysemy-log (Polysemy.Log.Prelude as Prelude) default-language: Haskell2010
readme.md view
@@ -1,81 +1,6 @@-> Log thrice, debug once.->-> –– Г. Любенов--# About--A common interface for the polysemy logging backend adapters.--An example program using a simple logger with predefined formatting and a custom data type:--```haskell-import Colog (logTextStdout)-import Colog.Polysemy (runLogAction)-import Polysemy (runM)--import Polysemy.Log.Colog (interpretDataLogColog, interpretLogStdout)-import qualified Polysemy.Log.Data.DataLog as DataLog-import Polysemy.Log.Data.DataLog (DataLog)-import qualified Polysemy.Log.Data.Log as Log-import Polysemy.Log.Data.Log (Log)--progSimple ::- Member Log r =>- Sem r ()-progSimple = do- Log.debug "debug"- Log.warn "warn"--data Message =- Message {- severity :: Text,- message :: Text- }- deriving (Eq, Show)--progData ::- Member (DataLog Message) r =>- Sem r ()-progData = do- DataLog.dataLog (Message "warn" "warning!")- DataLog.local (\ msg@Message{message} -> msg {message = "context: " <> message}) do- DataLog.dataLog (Message "error" "segfault!")--main :: IO ()-main =- runM do- interpretLogStdout progSimple- runLogAction @IO (contramap message logTextStdout) $ interpretDataLogColog @Message $ progData-```--For more documentation, please consult Hackage:-* [polysemy-log](https://hackage.haskell.org/package/polysemy-log)-* [polysemy-log-co](https://hackage.haskell.org/package/polysemy-log-co)-* [polysemy-log-di](https://hackage.haskell.org/package/polysemy-log-di)--# Building the Project--The build is defined in [nix], supporting `flake` and legacy `nix-build`.--With `nix-build`:--```bash-nix-build -A defaultPackage-nix-build -A packages.x86_64-linux.polysemy-log-co-```--With `nix flake`:--```-nix build-nix build '.#polysemy-log-co'-```--To run all tests:+A logging library for [Polysemy]. -```bash-nix flake check-```+For docs, please visit [Hackage]. -[nix]: https://nixos.org/manual/nix/unstable-[co-log]: https://hackage.haskell.org/package/co-log+[Polysemy](https://hackage.haskell.org/package/polysemy)+[Hackage](https://hackage.haskell.org/package/polysemy-log)
test/Polysemy/Log/Test/ConcTest.hs view
@@ -1,11 +1,10 @@ module Polysemy.Log.Test.ConcTest where import Data.Time (Day, UTCTime)-import Polysemy.Async (asyncToIOFinal) import Polysemy.Conc (interpretRace) import Polysemy.Test (UnitTest, assertEq, runTestAuto) import qualified Polysemy.Time as Time-import Polysemy.Time (GhcTime, MilliSeconds(MilliSeconds), interpretTimeGhc)+import Polysemy.Time (GhcTime, MilliSeconds (MilliSeconds), interpretTimeGhc) import Polysemy.Log.Atomic (interpretDataLogAtomic) import Polysemy.Log.Conc (interceptDataLogConc)
+ test/Polysemy/Log/Test/ExampleTest.hs view
@@ -0,0 +1,37 @@+{-# options_ghc -fplugin=Polysemy.Plugin #-}++module Polysemy.Log.Test.ExampleTest where++import Polysemy.Conc (runConc)++import qualified Polysemy.Log as Log+import Polysemy.Log (DataLog, Log, interpretDataLogStdout, interpretLogStdoutConc)+import qualified Polysemy.Log.Data.DataLog as DataLog++progSimple ::+ Member Log r =>+ Sem r ()+progSimple = do+ Log.debug "debug"+ Log.warn "warn"++data Message =+ Message {+ severity :: Text,+ message :: Text+ }+ deriving (Eq, Show)++progData ::+ Member (DataLog Message) r =>+ Sem r ()+progData = do+ DataLog.dataLog (Message "warn" "warning!")+ DataLog.local (\ msg@Message{message} -> msg {message = "context: " <> message}) do+ DataLog.dataLog (Message "error" "segfault!")++main :: IO ()+main =+ runConc do+ interpretLogStdoutConc progSimple+ interpretDataLogStdout progData