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 +4/−0
- README.md +2/−1
- rio-orphans.cabal +10/−7
- src/RIO/Orphans.hs +35/−19
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. --