packages feed

rio-orphans 0.1.1.0 → 0.1.2.0

raw patch · 4 files changed

+51/−27 lines, 4 filesdep +unliftio-coredep ~basePVP ok

version bump matches the API change (PVP)

Dependencies added: unliftio-core

Dependency ranges changed: base

API changes (from Hackage documentation)

+ RIO.Orphans: instance RIO.Prelude.Logger.HasLogFunc env => Control.Monad.Logger.MonadLoggerIO (RIO.Prelude.RIO.RIO env)

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for rio-orphans +## 0.1.2.0++* Add an instance for `MonadLoggerIO` typeclass, from the `monad-logger` library+ ## 0.1.1.0  * Add an instance for `MonadLogger` typeclass, from the `monad-logger` library
README.md view
@@ -2,7 +2,8 @@  Provides orphan instances for the `RIO` data type. Currently supports: -* `MonadCatch` and `MonadMask` from `exceptions` * `MonadBase` from `transformers-base` * `MonadBaseControl` from `monad-control`+* `MonadCatch` and `MonadMask` from `exceptions`+* `MonadLogger` from `monad-logger` * `MonadResource` from `resourcet`
rio-orphans.cabal view
@@ -1,11 +1,13 @@--- This file has been generated from package.yaml by hpack version 0.28.2.+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack ----- hash: 77de0e86872a5e0ec50e213804741ac79e8f08b768bec53e0d190ae09cc14b40+-- hash: 73b0abe6a63aaeca941c08d21e429b2221d75c0121c5d65d2dcd362f0beb6f2e  name:           rio-orphans-version:        0.1.1.0+version:        0.1.2.0 synopsis:       Orphan instances for the RIO type in the rio package description:    See README and Haddocks at <https://www.stackage.org/package/rio-orphans> category:       Control@@ -16,10 +18,9 @@ license:        MIT license-file:   LICENSE build-type:     Simple-cabal-version:  >= 1.10 extra-source-files:-    ChangeLog.md     README.md+    ChangeLog.md  source-repository head   type: git@@ -33,7 +34,7 @@   hs-source-dirs:       src   build-depends:-      base >=4.9 && <10+      base >=4.10 && <10     , exceptions     , fast-logger     , monad-control@@ -41,6 +42,7 @@     , resourcet     , rio     , transformers-base+    , unliftio-core   default-language: Haskell2010  test-suite rio-orphans-test@@ -53,7 +55,7 @@       test   ghc-options: -threaded -rtsopts -with-rtsopts=-N   build-depends:-      base >=4.9 && <10+      base >=4.10 && <10     , exceptions     , fast-logger     , hspec@@ -63,4 +65,5 @@     , rio     , rio-orphans     , transformers-base+    , unliftio-core   default-language: Haskell2010
src/RIO/Orphans.hs view
@@ -16,12 +16,13 @@ import RIO import Control.Monad.Catch (MonadCatch, MonadMask) import Control.Monad.Base (MonadBase)+import Control.Monad.IO.Unlift (askRunInIO) import Control.Monad.Trans.Resource.Internal (MonadResource (..), ReleaseMap, ResourceT (..)) import Control.Monad.Trans.Resource (runResourceT) import Control.Monad.Trans.Control (MonadBaseControl (..))  import qualified Control.Monad.Logger as LegacyLogger-import Control.Monad.Logger (MonadLogger (..), LogStr)+import Control.Monad.Logger (MonadLogger (..), MonadLoggerIO (..), LogStr) import System.Log.FastLogger (fromLogStr) import qualified GHC.Stack as GS @@ -48,24 +49,39 @@ -- | @since 0.1.1.0 instance HasLogFunc env => MonadLogger (RIO env) where   monadLoggerLog loc source level msg =-      let ?callStack = GS.fromCallSiteList [("", GS.SrcLoc-            { GS.srcLocPackage = LegacyLogger.loc_package loc-            , GS.srcLocModule = LegacyLogger.loc_module loc-            , GS.srcLocFile = LegacyLogger.loc_filename loc-            , GS.srcLocStartLine = fst $ LegacyLogger.loc_start loc-            , GS.srcLocStartCol = snd $ LegacyLogger.loc_start loc-            , GS.srcLocEndLine = fst $ LegacyLogger.loc_end loc-            , GS.srcLocEndCol = snd $ LegacyLogger.loc_end loc-            })]-       in logGeneric source rioLogLevel (display $ LegacyLogger.toLogStr msg)-    where-      rioLogLevel =-        case level of-          LegacyLogger.LevelDebug -> LevelDebug-          LegacyLogger.LevelInfo  -> LevelInfo-          LegacyLogger.LevelWarn  -> LevelWarn-          LegacyLogger.LevelError  -> LevelError-          LegacyLogger.LevelOther name -> LevelOther name+      let ?callStack = rioCallStack loc+       in logGeneric source (rioLogLevel level) (display $ LegacyLogger.toLogStr msg)++-- | Do not let the generated function escape its RIO context. This may lead+--   to log-related cleanup running /before/ the function is called.+--+--   @since 0.1.2.0+instance HasLogFunc env => MonadLoggerIO (RIO env) where+  askLoggerIO = do+    runInIO <- askRunInIO+    pure $ \loc source level str ->+      let ?callStack = rioCallStack loc+       in runInIO (logGeneric source (rioLogLevel level) (display str))++rioLogLevel :: LegacyLogger.LogLevel -> LogLevel+rioLogLevel level =+  case level of+    LegacyLogger.LevelDebug -> LevelDebug+    LegacyLogger.LevelInfo  -> LevelInfo+    LegacyLogger.LevelWarn  -> LevelWarn+    LegacyLogger.LevelError  -> LevelError+    LegacyLogger.LevelOther name -> LevelOther name++rioCallStack :: LegacyLogger.Loc -> CallStack+rioCallStack loc = GS.fromCallSiteList [("", GS.SrcLoc+  { GS.srcLocPackage = LegacyLogger.loc_package loc+  , GS.srcLocModule = LegacyLogger.loc_module loc+  , GS.srcLocFile = LegacyLogger.loc_filename loc+  , GS.srcLocStartLine = fst $ LegacyLogger.loc_start loc+  , GS.srcLocStartCol = snd $ LegacyLogger.loc_start loc+  , GS.srcLocEndLine = fst $ LegacyLogger.loc_end loc+  , GS.srcLocEndCol = snd $ LegacyLogger.loc_end loc+  })]  -- | A collection of all of the registered resource cleanup actions. --