monad-control-identity 0.1.0.3 → 0.1.1.1
raw patch · 3 files changed
+52/−15 lines, 3 filesdep +stmdep ~basedep ~monad-controldep ~transformersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: stm
Dependency ranges changed: base, monad-control, transformers, transformers-base
API changes (from Hackage documentation)
- Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.MonadBaseControl b b => Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity b b
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity ((->) r) ((->) r)
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity (Control.Monad.ST.Lazy.Imp.ST s) (Control.Monad.ST.Lazy.Imp.ST s)
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity (Data.Either.Either e) (Data.Either.Either e)
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity (GHC.ST.ST s) (GHC.ST.ST s)
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity Data.Functor.Identity.Identity Data.Functor.Identity.Identity
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity GHC.Conc.Sync.STM GHC.Conc.Sync.STM
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity GHC.Maybe.Maybe GHC.Maybe.Maybe
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity GHC.Types.IO GHC.Types.IO
+ Control.Monad.Trans.Control.Identity: instance Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity [] []
+ Control.Monad.Trans.Control.Identity: instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Trans.Control.Identity.Base m)
+ Control.Monad.Trans.Control.Identity: instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.Control.Identity.Base m)
+ Control.Monad.Trans.Control.Identity: instance GHC.Base.Monad m => Control.Monad.Base.MonadBase m (Control.Monad.Trans.Control.Identity.Base m)
+ Control.Monad.Trans.Control.Identity: instance GHC.Base.Monad m => Control.Monad.Trans.Control.Identity.MonadBaseControlIdentity m (Control.Monad.Trans.Control.Identity.Base m)
+ Control.Monad.Trans.Control.Identity: instance GHC.Base.Monad m => Control.Monad.Trans.Control.MonadBaseControl m (Control.Monad.Trans.Control.Identity.Base m)
+ Control.Monad.Trans.Control.Identity: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.Control.Identity.Base m)
Files
- CHANGELOG.md +9/−0
- monad-control-identity.cabal +10/−8
- src/Control/Monad/Trans/Control/Identity.hs +33/−7
CHANGELOG.md view
@@ -1,5 +1,14 @@ # Revision history for monad-control-identity +## 0.1.1.1 -- 2022-03-31++* Add base version boundary.++## 0.1.1.0 -- 2022-03-31++* Remove version boundaries for all dependencies.+* Use DerivingVia internally to generate base instances for `MonadBaseControlIdentity`.+ ## 0.1.0.3 -- 2020-07-28 * Accept older versions of transformers.
monad-control-identity.cabal view
@@ -1,9 +1,10 @@ name: monad-control-identity-version: 0.1.0.3+version: 0.1.1.1 synopsis: Stronger classes than monad-control-description: This package defines the type class MonadBaseControlIdentity, which is very- similar to MonadBaseControl from monad-control.- The difference is, that MonadBaseControlIdentity instances are only valid,+description: This package defines the type class 'MonadBaseControlIdentity', which is very+ similar to 'MonadBaseControl' from+ <https://hackage.haskell.org/package/monad-control monad-control>.+ The difference is, that 'MonadBaseControlIdentity' instances are only valid, when there is no monadic state. This results in simpler type signatures to lift values in contravariant positions.@@ -21,10 +22,11 @@ library exposed-modules: Control.Monad.Trans.Control.Functor Control.Monad.Trans.Control.Identity- build-depends: base >= 4.5 && < 5- , monad-control >= 1.0.2.3 && < 1.1- , transformers >= 0.5.5.0 && < 0.6- , transformers-base >= 0.4.5.2 && < 0.5+ build-depends: base < 5+ , monad-control+ , transformers+ , transformers-base+ , stm hs-source-dirs: src default-language: Haskell2010 ghc-options: -Wall
src/Control/Monad/Trans/Control/Identity.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE FlexibleInstances, FunctionalDependencies, TypeFamilies, Rank2Types, UndecidableInstances #-}+{-# LANGUAGE DerivingVia, FlexibleInstances, FunctionalDependencies, GeneralizedNewtypeDeriving, StandaloneDeriving, TypeFamilies, Rank2Types, UndecidableInstances #-} module Control.Monad.Trans.Control.Identity ( @@ -9,7 +9,7 @@ @ newtype ExampleT = ...- deriving ('Monad', 'MonadTrans')+ deriving ('Monad', 'Control.Monad.Trans.Class.MonadTrans') instance 'MonadTransControl' ExampleT where ...@@ -21,8 +21,8 @@ , defaultLiftWithIdentity -- * MonadBaseControlIdentity--- | Regarding the 'IO' base monad this can be seen as an alternative--- way to implement 'MonadUnliftIO'.+-- | Regarding the 'IO' base monad this can be seen as an alternative,+-- but equivalent, way to implement 'MonadUnliftIO'. , MonadBaseControlIdentity (..) {- | Just like 'MonadTransControlIdentity', 'MonadBaseControlIdentity' instances can easily be created for monad transformers:@@ -36,9 +36,14 @@ ) where +import Control.Monad.Base+import Control.Monad.ST.Lazy as L+import Control.Monad.ST.Strict as S+import Control.Monad.STM import Control.Monad.Trans.Control import Control.Monad.Trans.Identity import Control.Monad.Trans.Reader+import Data.Functor.Identity {- | The 'MonadTransControlIdentity' type class is a stronger version of 'MonadTransControl':@@ -87,11 +92,32 @@ liftBaseWithIdentity $ \ runIdInBase -> inner $ runIdInBase . runId -instance MonadBaseControl b b => MonadBaseControlIdentity b b where- liftBaseWithIdentity inner = inner id- instance MonadBaseControlIdentity b m => MonadBaseControlIdentity b (IdentityT m) where liftBaseWithIdentity = defaultLiftBaseWithIdentity instance MonadBaseControlIdentity b m => MonadBaseControlIdentity b (ReaderT r m) where liftBaseWithIdentity = defaultLiftBaseWithIdentity++deriving via Base IO instance MonadBaseControlIdentity IO IO+deriving via Base Maybe instance MonadBaseControlIdentity Maybe Maybe+deriving via Base (Either e) instance MonadBaseControlIdentity (Either e) (Either e)+deriving via Base [] instance MonadBaseControlIdentity [] []+deriving via Base ((->) r) instance MonadBaseControlIdentity ((->) r) ((->) r)+deriving via Base Identity instance MonadBaseControlIdentity Identity Identity+deriving via Base STM instance MonadBaseControlIdentity STM STM+deriving via Base (S.ST s) instance MonadBaseControlIdentity (S.ST s) (S.ST s)+deriving via Base (L.ST s) instance MonadBaseControlIdentity (L.ST s) (L.ST s)++newtype Base m a = MkBase { getBase :: m a }+ deriving newtype (Functor, Applicative, Monad)++instance Monad m => MonadBase m (Base m) where+ liftBase = MkBase++instance Monad m => MonadBaseControl m (Base m) where+ type StM (Base m) a = a+ liftBaseWith inner = MkBase $ inner getBase+ restoreM = return++instance Monad m => MonadBaseControlIdentity m (Base m) where+ liftBaseWithIdentity inner = MkBase $ inner getBase