packages feed

polysemy-log 0.4.0.0 → 0.4.1.0

raw patch · 2 files changed

+21/−5 lines, 2 filesdep +asyncPVP ok

version bump matches the API change (PVP)

Dependencies added: async

API changes (from Hackage documentation)

+ Polysemy.Log.Conc: finalize :: forall msg r. Members [Queue msg, Resource, Async, Race, Embed IO] r => Async (Maybe ()) -> Sem r ()

Files

lib/Polysemy/Log/Conc.hs view
@@ -2,15 +2,18 @@ module Polysemy.Log.Conc where  import Polysemy (interceptH, runT, subsume)-import Polysemy.Async (Async, async)+import Polysemy.Async (Async, async, await) 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)+import Polysemy.Resource (Resource, finally)  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.@@ -55,6 +58,18 @@         DataLog.dataLog @msg msg         spin +-- |Close the concurrent logger's queue and wait for one second to allow it to process any messages that have been+-- queued.+finalize ::+  ∀ msg r .+  Members [Queue msg, Resource, Async, Race, Embed IO] r =>+  Base.Async (Maybe ()) ->+  Sem r ()+finalize handle =+  Conc.timeoutU (Seconds 1) do+    Queue.close @msg+    void (await handle)+ -- |Intercept 'DataLog' for concurrent processing. -- Creates a queue and starts a worker thread. -- All log messages received by the interceptor in 'interceptDataLogConcWithLocal' are written to the queue and sent to@@ -74,6 +89,6 @@   Sem r a interceptDataLogConc maxQueued sem = do   interpretQueueTBM @msg maxQueued do-    !_ <- async (loggerThread @msg)-    interceptDataLogConcWith @msg (raise sem)+    !handle <- async (loggerThread @msg)+    finally (interceptDataLogConcWith @msg (raise sem)) (finalize @msg handle) {-# inline interceptDataLogConc #-}
polysemy-log.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           polysemy-log-version:        0.4.0.0+version:        0.4.1.0 synopsis:       Polysemy Effects for Logging description:    See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html> category:       Logging@@ -111,6 +111,7 @@   ghc-options: -Wall -Wredundant-constraints -Wunused-packages -Widentities   build-depends:       ansi-terminal >=0.10.3+    , async     , base ==4.*     , polysemy >=1.5     , polysemy-conc >=0.3