deriving-trans 0.9.0.0 → 0.9.1.0
raw patch · 4 files changed
+89/−1 lines, 4 filesdep +monad-loggerPVP ok
version bump matches the API change (PVP)
Dependencies added: monad-logger
API changes (from Hackage documentation)
+ Control.Monad.Trans.Compose: instance (Control.Monad.IO.Class.MonadIO (t2 m), Control.Monad.IO.Class.MonadIO m, Control.Monad.Trans.Class.MonadTrans t2) => Control.Monad.Logger.MonadLoggerIO (Control.Monad.Trans.Compose.ComposeT Control.Monad.Logger.LoggingT t2 m)
+ Control.Monad.Trans.Compose: instance (Control.Monad.IO.Class.MonadIO (t2 m), Control.Monad.IO.Class.MonadIO m, Control.Monad.Trans.Class.MonadTrans t2) => Control.Monad.Logger.MonadLoggerIO (Control.Monad.Trans.Compose.ComposeT Control.Monad.Logger.NoLoggingT t2 m)
+ Control.Monad.Trans.Compose: instance (Control.Monad.Logger.MonadLogger (t2 m), Control.Monad.Trans.Class.MonadTrans t1) => Control.Monad.Logger.MonadLogger (Control.Monad.Trans.Compose.ComposeT t1 t2 m)
+ Control.Monad.Trans.Compose: instance (Control.Monad.Logger.MonadLoggerIO (t2 m), Control.Monad.Trans.Class.MonadTrans t1, Control.Monad.IO.Class.MonadIO m, Control.Monad.Trans.Class.MonadTrans t2) => Control.Monad.Logger.MonadLoggerIO (Control.Monad.Trans.Compose.ComposeT t1 t2 m)
+ Control.Monad.Trans.Compose: instance Control.Monad.IO.Class.MonadIO (t2 m) => Control.Monad.Logger.MonadLogger (Control.Monad.Trans.Compose.ComposeT Control.Monad.Logger.LoggingT t2 m)
+ Control.Monad.Trans.Compose: instance GHC.Base.Monad (t2 m) => Control.Monad.Logger.MonadLogger (Control.Monad.Trans.Compose.ComposeT Control.Monad.Logger.NoLoggingT t2 m)
+ Control.Monad.Trans.Compose: instance GHC.Base.Monad (t2 m) => Control.Monad.Logger.MonadLogger (Control.Monad.Trans.Compose.ComposeT Control.Monad.Logger.WriterLoggingT t2 m)
+ Control.Monad.Trans.Elevator: instance (Control.Monad.Logger.MonadLogger m, Control.Monad.Trans.Class.MonadTrans t) => Control.Monad.Logger.MonadLogger (Control.Monad.Trans.Elevator.Elevator t m)
+ Control.Monad.Trans.Elevator: instance (Control.Monad.Logger.MonadLoggerIO m, Control.Monad.Trans.Class.MonadTrans t) => Control.Monad.Logger.MonadLoggerIO (Control.Monad.Trans.Elevator.Elevator t m)
Files
- CHANGELOG.md +6/−0
- deriving-trans.cabal +9/−1
- src/Control/Monad/Trans/Compose.hs +61/−0
- src/Control/Monad/Trans/Elevator.hs +13/−0
CHANGELOG.md view
@@ -1,5 +1,11 @@ # Revision history for deriving-trans +## 0.9.1.0 *12 Jul 2023*++* Support new optional dependency monad-logger `>= 0.3.38`.+* Add `MonadLogger` and `MonadLoggerIO` instances to `Elevator` and `ComposeT`.+* Add `MonadLogger` and `MonadLoggerIO` "base-case" instances for `LoggingT`, `NoLoggingT` and `WriterLoggingT`.+ ## 0.9.0.0 *05 Jul 2023* * Drop support for `GHC < 9.6`.
deriving-trans.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: deriving-trans-version: 0.9.0.0+version: 0.9.1.0 synopsis: Derive instances for monad transformer stacks description: Implementing instances for monad transformer stacks can be tedious.@@ -35,6 +35,11 @@ description: Implement instances for `MonadLogic`. +flag monad-logger+ default: True+ description:+ Implement instances for `MonadLogger` and `MonadLoggerIO`.+ flag mtl default: True description:@@ -79,6 +84,9 @@ if flag(logict) build-depends: , logict >= 0.8.0.0+ if flag(monad-logger)+ build-depends:+ , monad-logger >= 0.3.38 if flag(mtl) other-modules: Control.Monad.Accum.OrphanInstances
src/Control/Monad/Trans/Compose.hs view
@@ -29,6 +29,10 @@ import Control.Monad.Logic.Class qualified as LogicT #endif +#if defined(VERSION_monad_logger)+import Control.Monad.Logger qualified as MonadLogger+#endif+ #if defined(VERSION_mtl) import Control.Monad.Accum qualified as Mtl import Control.Monad.Accum.OrphanInstances qualified as Mtl ()@@ -300,6 +304,63 @@ instance ( Monad (t2 m) ) => LogicT.MonadLogic (ComposeT LogicT.T.LogicT t2 m)+#endif++#if defined(VERSION_monad_logger)+-- | /OVERLAPPABLE/.+-- Elevated to @(t2 m)@.+deriving via Elevator t1 (t2 (m :: Type -> Type))+ instance {-# OVERLAPPABLE #-}+ ( MonadLogger.MonadLogger (t2 m)+ , MonadTrans t1+ ) => MonadLogger.MonadLogger (ComposeT t1 t2 m)++-- | Set by 'MonadLogger.LoggingT'.+deriving via MonadLogger.LoggingT (t2 (m :: Type -> Type))+ instance+ ( MonadIO (t2 m)+ ) => MonadLogger.MonadLogger (ComposeT MonadLogger.LoggingT t2 m)++-- | Set by 'MonadLogger.NoLoggingT'.+deriving via MonadLogger.NoLoggingT (t2 (m :: Type -> Type))+ instance+ ( Monad (t2 m)+ ) => MonadLogger.MonadLogger (ComposeT MonadLogger.NoLoggingT t2 m)++-- | Set by 'MonadLogger.WriterLoggingT'.+deriving via MonadLogger.WriterLoggingT (t2 (m :: Type -> Type))+ instance+ ( Monad (t2 m)+ ) => MonadLogger.MonadLogger (ComposeT MonadLogger.WriterLoggingT t2 m)++-- TODO: `MonadIO m` and `MonadTrans t2` should not be required for this instance+-- | /OVERLAPPABLE/.+-- Elevated to @(t2 m)@.+deriving via Elevator t1 (t2 (m :: Type -> Type))+ instance {-# OVERLAPPABLE #-}+ ( MonadLogger.MonadLoggerIO (t2 m)+ , MonadTrans t1+ , MonadIO m+ , MonadTrans t2+ ) => MonadLogger.MonadLoggerIO (ComposeT t1 t2 m)++-- TODO: `MonadIO m` and `MonadTrans t2` should not be required for this instance+-- | Set by 'MonadLogger.LoggingT'.+deriving via MonadLogger.LoggingT (t2 (m :: Type -> Type))+ instance+ ( MonadIO (t2 m)+ , MonadIO m+ , MonadTrans t2+ ) => MonadLogger.MonadLoggerIO (ComposeT MonadLogger.LoggingT t2 m)++-- TODO: `MonadIO m` and `MonadTrans t2` should not be required for this instance+-- | Set by 'MonadLogger.NoLoggingT'.+deriving via MonadLogger.NoLoggingT (t2 (m :: Type -> Type))+ instance+ ( MonadIO (t2 m)+ , MonadIO m+ , MonadTrans t2+ ) => MonadLogger.MonadLoggerIO (ComposeT MonadLogger.NoLoggingT t2 m) #endif #if defined(VERSION_mtl)
src/Control/Monad/Trans/Elevator.hs view
@@ -23,6 +23,10 @@ import Control.Monad.Logic.Class qualified as LogicT #endif +#if defined(VERSION_monad_logger)+import Control.Monad.Logger qualified as MonadLogger+#endif+ #if defined(VERSION_mtl) import Control.Monad.Accum qualified as Mtl import Control.Monad.Cont.Class qualified as Mtl@@ -145,6 +149,15 @@ instance (LogicT.MonadLogic m, MonadTransControlIdentity t) => LogicT.MonadLogic (Elevator t m) where msplit tma = (((\(a, b) -> (a, lift b)) <$>) <$>) $ liftWithIdentity $ \runT -> LogicT.msplit $ runT tma+#endif++#if defined(VERSION_monad_logger)+instance (MonadLogger.MonadLogger m, MonadTrans t) => MonadLogger.MonadLogger (Elevator t m) where+ monadLoggerLog location logSource logLevel = lift .+ MonadLogger.monadLoggerLog location logSource logLevel++instance (MonadLogger.MonadLoggerIO m, MonadTrans t) => MonadLogger.MonadLoggerIO (Elevator t m) where+ askLoggerIO = lift MonadLogger.askLoggerIO #endif #if defined(VERSION_mtl)