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 +6/−0
- deriving-trans.cabal +9/−1
- src/Control/Monad/Trans/Compose.hs +34/−1
- src/Control/Monad/Trans/Elevator.hs +27/−0
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)