packages feed

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 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