packages feed

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 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