packages feed

deriving-trans 0.6.0.0 → 0.6.1.0

raw patch · 4 files changed

+76/−2 lines, 4 filesdep +randomPVP ok

version bump matches the API change (PVP)

Dependencies added: random

API changes (from Hackage documentation)

+ Control.Monad.Trans.Compose: instance (System.Random.Internal.FrozenGen f (t2 m), Control.Monad.Trans.Class.MonadTrans t1, Control.Monad.IO.Class.MonadIO (t2 m)) => System.Random.Internal.FrozenGen (Data.Functor.Const.Const f (Control.Monad.Trans.Compose.ComposeT t1 t2)) (Control.Monad.Trans.Compose.ComposeT t1 t2 m)
+ Control.Monad.Trans.Compose: instance (System.Random.Internal.StatefulGen g (t2 m), Control.Monad.Trans.Class.MonadTrans t1, Control.Monad.IO.Class.MonadIO (t2 m)) => System.Random.Internal.StatefulGen (Data.Functor.Const.Const g (Control.Monad.Trans.Compose.ComposeT t1 t2)) (Control.Monad.Trans.Compose.ComposeT t1 t2 m)
+ Control.Monad.Trans.Compose: instance (System.Random.Stateful.RandomGenM g r (t2 m), Control.Monad.Trans.Class.MonadTrans t1, Control.Monad.IO.Class.MonadIO (t2 m)) => System.Random.Stateful.RandomGenM (Data.Functor.Const.Const g (Control.Monad.Trans.Compose.ComposeT t1 t2)) r (Control.Monad.Trans.Compose.ComposeT t1 t2 m)
+ Control.Monad.Trans.Elevator: instance (System.Random.Internal.FrozenGen f m, Control.Monad.Trans.Class.MonadTrans t, Control.Monad.IO.Class.MonadIO m) => System.Random.Internal.FrozenGen (Data.Functor.Const.Const f (Control.Monad.Trans.Elevator.Elevator t)) (Control.Monad.Trans.Elevator.Elevator t m)
+ Control.Monad.Trans.Elevator: instance (System.Random.Internal.StatefulGen g m, Control.Monad.Trans.Class.MonadTrans t, Control.Monad.IO.Class.MonadIO m) => System.Random.Internal.StatefulGen (Data.Functor.Const.Const g (Control.Monad.Trans.Elevator.Elevator t)) (Control.Monad.Trans.Elevator.Elevator t m)
+ Control.Monad.Trans.Elevator: instance (System.Random.Stateful.RandomGenM g r m, Control.Monad.Trans.Class.MonadTrans t, Control.Monad.IO.Class.MonadIO m) => System.Random.Stateful.RandomGenM (Data.Functor.Const.Const g (Control.Monad.Trans.Elevator.Elevator t)) r (Control.Monad.Trans.Elevator.Elevator t m)

Files

CHANGELOG.md view
@@ -1,5 +1,11 @@ # Revision history for deriving-trans +## 0.6.1.0 *27 Jan 2023*++* Add optional dependency `random >= 1.2`.+* Add `StatefulGen`, `FrozenGen` and `RandomGenM` instances to `Elevator` and `ComposeT`.+  There are no "base-case" instances because there are no related transformers, just base monads.+ ## 0.6.0.0 *23 Jan 2023*  * Update dependencies:
deriving-trans.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: deriving-trans-version: 0.6.0.0+version: 0.6.1.0 synopsis: Derive instances for monad transformer stacks description:   Implementing instances for monad transformer stacks can be tedious.@@ -40,6 +40,11 @@   description:     Implement instances for `PrimMonad`. +flag random+  default: True+  description:+    Implement instances for random's type classes.+ flag resourcet   default: True   description:@@ -75,6 +80,9 @@   if flag(primitive)     build-depends:       , primitive+  if flag(random)+    build-depends:+      , random >= 1.2   if flag(resourcet)     build-depends:       , resourcet >= 1.2
src/Control/Monad/Trans/Compose.hs view
@@ -49,6 +49,11 @@ import Control.Monad.Primitive qualified as Primitive #endif +#if defined(VERSION_random)+import Data.Functor.Const qualified as Random+import System.Random.Stateful qualified as Random+#endif+ #if defined(VERSION_resourcet) import Control.Monad.Trans.Resource qualified as ResourceT #endif@@ -377,6 +382,34 @@     Primitive.PrimMonad (ComposeT t1 t2 m) #endif +#if defined(VERSION_random)+-- TODO: `MonadIO (t2 m)` should not be required for this instance+-- | /OVERLAPPABLE/.+-- Elevated to @(t2 m)@.+instance {-# OVERLAPPABLE #-} (Random.StatefulGen g (t2 m), MonadTrans t1, MonadIO (t2 m)) => Random.StatefulGen (Random.Const g (ComposeT t1 t2)) (ComposeT t1 t2 m) where+  uniformWord32R word32 = ComposeT . lift . Random.uniformWord32R word32 . Random.getConst+  uniformWord64R word64 = ComposeT . lift . Random.uniformWord64R word64 . Random.getConst+  uniformWord8 = ComposeT . lift . Random.uniformWord8 . Random.getConst+  uniformWord16 = ComposeT . lift . Random.uniformWord16 . Random.getConst+  uniformWord32 = ComposeT . lift . Random.uniformWord32 . Random.getConst+  uniformWord64 = ComposeT . lift . Random.uniformWord64 . Random.getConst+  uniformShortByteString n = ComposeT . lift . Random.uniformShortByteString n . Random.getConst++-- TODO: `MonadIO (t2 m)` should not be required for this instance+-- | /OVERLAPPABLE/.+-- Elevated to @(t2 m)@.+instance {-# OVERLAPPABLE #-} (Random.FrozenGen f (t2 m), MonadTrans t1, MonadIO (t2 m)) => Random.FrozenGen (Random.Const f (ComposeT t1 t2)) (ComposeT t1 t2 m) where+  type MutableGen (Random.Const f (ComposeT t1 t2)) (ComposeT t1 t2 m) = Random.Const (Random.MutableGen f (t2 m)) (ComposeT t1 t2)+  freezeGen = ComposeT . lift . fmap Random.Const . Random.freezeGen . Random.getConst+  thawGen = ComposeT . lift . fmap Random.Const . Random.thawGen . Random.getConst++-- TODO: `MonadIO (t2 m)` should not be required for this instance+-- | /OVERLAPPABLE/.+-- Elevated to @(t2 m)@.+instance {-# OVERLAPPABLE #-} (Random.RandomGenM g r (t2 m), MonadTrans t1, MonadIO (t2 m)) => Random.RandomGenM (Random.Const g (ComposeT t1 t2)) r (ComposeT t1 t2 m) where+  applyRandomGenM f = ComposeT . lift . Random.applyRandomGenM f . Random.getConst+#endif+ #if defined(VERSION_resourcet) -- TODO: `MonadIO m` and `MonadTrans t2` should not be required for this instance -- | /OVERLAPPABLE/.@@ -541,7 +574,7 @@ -- runAppT :: AppT m a -> m ('StT' AppT a) -- runAppT appTma = --   'Control.Monad.Trans.Compose.Transparent.runTransparentT'---     'Control.Monad.Trans.Compose.Infix../>' (\\ tma -> 'T.runReaderT' tma 'True')+--     'Control.Monad.Trans.Compose.Infix../>' (\\ tma -> 'Control.Monad.Trans.Reader.runReaderT' tma 'True') --     'Control.Monad.Trans.Compose.Infix../>' runCustomT --     'Control.Monad.Trans.Compose.Infix../>' runReaderT' --     'Control.Monad.Trans.Compose.Infix../>' runStateT'
src/Control/Monad/Trans/Elevator.hs view
@@ -34,6 +34,11 @@ import Control.Monad.Primitive qualified as Primitive #endif +#if defined(VERSION_random)+import Data.Functor.Const qualified as Random+import System.Random.Stateful qualified as Random+#endif+ #if defined(VERSION_resourcet) import Control.Monad.Trans.Resource qualified as ResourceT #endif@@ -147,6 +152,28 @@ instance (Primitive.PrimMonad m, MonadTrans t) => Primitive.PrimMonad (Elevator t m) where   type PrimState (Elevator t m) = Primitive.PrimState m   primitive = lift . Primitive.primitive+#endif++#if defined(VERSION_random)+-- TODO: `MonadIO m` should be redundant.+instance (Random.StatefulGen g m, MonadTrans t, MonadIO m) => Random.StatefulGen (Random.Const g (Elevator t)) (Elevator t m) where+  uniformWord32R word32 = lift . Random.uniformWord32R word32 . Random.getConst+  uniformWord64R word64 = lift . Random.uniformWord64R word64 . Random.getConst+  uniformWord8 = lift . Random.uniformWord8 . Random.getConst+  uniformWord16 = lift . Random.uniformWord16 . Random.getConst+  uniformWord32 = lift . Random.uniformWord32 . Random.getConst+  uniformWord64 = lift . Random.uniformWord64 . Random.getConst+  uniformShortByteString n = lift . Random.uniformShortByteString n . Random.getConst++-- TODO: `MonadIO m` should be redundant.+instance (Random.FrozenGen f m, MonadTrans t, MonadIO m) => Random.FrozenGen (Random.Const f (Elevator t)) (Elevator t m) where+  type MutableGen (Const f (Elevator t)) (Elevator t m) = Const (Random.MutableGen f m) (Elevator t)+  freezeGen = lift . fmap Random.Const . Random.freezeGen . Random.getConst+  thawGen = lift . fmap Random.Const . Random.thawGen . Random.getConst++-- TODO: `MonadIO m` should be redundant.+instance (Random.RandomGenM g r m, MonadTrans t, MonadIO m) => Random.RandomGenM (Random.Const g (Elevator t)) r (Elevator t m) where+  applyRandomGenM f = lift . Random.applyRandomGenM f . Random.getConst #endif  #if defined(VERSION_resourcet)