packages feed

hreader 1.0.2 → 1.1.0

raw patch · 4 files changed

+48/−29 lines, 4 filesdep +transformersdep ~monad-controlPVP ok

version bump matches the API change (PVP)

Dependencies added: transformers

Dependency ranges changed: monad-control

API changes (from Hackage documentation)

- Control.Monad.HReader: instance GHC.Generics.Constructor Control.Monad.HReader.C1_0HReaderT
- Control.Monad.HReader: instance GHC.Generics.Datatype Control.Monad.HReader.D1HReaderT
- Control.Monad.HReader: instance GHC.Generics.Selector Control.Monad.HReader.S1_0_0HReaderT
+ Control.Monad.HReader.Class: hlocal :: MonadHReader m => (HSet (MHRElements m) -> HSet (MHRElements m)) -> m a -> m a
+ Control.Monad.HReader.Class: instance Control.Monad.HReader.Class.MonadHReader m => Control.Monad.HReader.Class.MonadHReader (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Monad.HReader.Class: instance Control.Monad.HReader.Class.MonadHReader m => Control.Monad.HReader.Class.MonadHReader (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Monad.HReader.Class: type family MHRElements m :: [*];
+ Control.Monad.HReader.Class: }
- Control.Monad.HReader.Class: class (Monad m, Applicative m) => MonadHReader m where type family MHRElements m :: [*]
+ Control.Monad.HReader.Class: class (Monad m, Applicative m) => MonadHReader m where type MHRElements m :: [*] where {

Files

CHANGELOG.md view
@@ -1,5 +1,10 @@ # CHANGELOG +## 1.1.0+### Added+* instances of `MonadHReader` for `MaybeT` and `IdentityT`+* method 'hlocal' in `MonadHReader`+ ## 1.0.2 ### Added * added forgotten `MonadMask` instance
hreader.cabal view
@@ -1,5 +1,5 @@ name:                hreader-version:             1.0.2+version:             1.1.0 synopsis:            Generalization of MonadReader and ReaderT using hset license:             BSD3 license-file:        LICENSE@@ -41,6 +41,7 @@                      , monad-control                      , mtl                      , tagged+                     , transformers                      , transformers-base    exposed-modules:     Control.Monad.HReader
src/Control/Monad/HReader.hs view
@@ -19,6 +19,8 @@ import Data.Typeable import GHC.Generics +import qualified Control.Monad.Trans.Reader as Reader+ #if MIN_VERSION_mtl(2, 2, 1) import Control.Monad.Except #else@@ -78,6 +80,7 @@ instance (Monad m, Applicative m) => MonadHReader (HReaderT els m) where   type MHRElements (HReaderT els m) = els   askHSet = HReaderT ask+  hlocal f (HReaderT r) = HReaderT $ Reader.local f r  deriving instance MFunctor (HReaderT els) deriving instance MMonad (HReaderT els)
src/Control/Monad/HReader/Class.hs view
@@ -9,6 +9,9 @@ import Control.Monad.Cont import Control.Monad.List import Control.Monad.Reader+import Control.Monad.Trans.Control+import Control.Monad.Trans.Identity+import Control.Monad.Trans.Maybe import Data.HSet import Data.Tagged import GHC.Exts@@ -22,12 +25,13 @@ import Data.Monoid #endif -import qualified Control.Monad.RWS.Lazy       as RWSL-import qualified Control.Monad.RWS.Strict     as RWSS-import qualified Control.Monad.State.Lazy     as SL-import qualified Control.Monad.State.Strict   as SS-import qualified Control.Monad.Writer.Lazy    as WL-import qualified Control.Monad.Writer.Strict  as WS+import qualified Control.Monad.RWS.Lazy      as RWSL+import qualified Control.Monad.RWS.Strict    as RWSS+import qualified Control.Monad.State.Lazy    as SL+import qualified Control.Monad.State.Strict  as SS+import qualified Control.Monad.Trans.Cont    as Cont+import qualified Control.Monad.Writer.Lazy   as WL+import qualified Control.Monad.Writer.Strict as WS  -- | Easy generate constraint like -- __(HGettable (MHRElements m) Int, HGettable (MHRElements m) Bool)__@@ -41,27 +45,25 @@ class (Monad m, Applicative m) => MonadHReader m where   type MHRElements m :: [*]   askHSet :: m (HSet (MHRElements m))+  hlocal :: (HSet (MHRElements m) -> HSet (MHRElements m)) -> m a -> m a --- | Ask arbitrary element of hset inside HReader-hask :: (MonadHReader m, HGettable (MHRElements m) e)-      => m e-hask = hget <$> askHSet --- | Ask arbitrary labeled element of hset in HReader-haskTagged :: (MonadHReader m, HGettable (MHRElements m) (Tagged tag e))-           => proxy tag-           -> m e-haskTagged p = hgetTagged p <$> askHSet+instance (MonadHReader m) => MonadHReader (ContT r m) where+  type MHRElements (ContT r m) = MHRElements m+  askHSet = lift askHSet+  hlocal = Cont.liftLocal askHSet hlocal  #define MHR(MONAD)                                        \ instance (MonadHReader m) => MonadHReader (MONAD) where { \   type MHRElements (MONAD) = MHRElements m ;            \   askHSet = lift askHSet ;                                \+  hlocal f ma = liftThrough (hlocal f) ma  ; \   } +MHR(IdentityT m) MHR(ReaderT r m)-MHR(ContT r m) MHR(ListT m)+MHR(MaybeT m)  #if MIN_VERSION_mtl(2, 2, 1) MHR(ExceptT e m)@@ -70,18 +72,26 @@ MHR(SL.StateT s m) MHR(SS.StateT s m) -instance (MonadHReader m, Monoid w) => MonadHReader (WL.WriterT w m) where-  type MHRElements (WL.WriterT w m) = MHRElements m-  askHSet = lift askHSet -instance (MonadHReader m, Monoid w) => MonadHReader (WS.WriterT w m) where-  type MHRElements (WS.WriterT w m) = MHRElements m-  askHSet = lift askHSet+#define MHRWRITER(MONAD)                                        \+instance (MonadHReader m, Monoid w) => MonadHReader (MONAD) where { \+  type MHRElements (MONAD) = MHRElements m ;            \+  askHSet = lift askHSet ;                                \+  hlocal f ma = liftThrough (hlocal f) ma  ; \+  } -instance (MonadHReader m, Monoid w) => MonadHReader (RWSL.RWST r w s m) where-  type MHRElements (RWSL.RWST r w s m) = MHRElements m-  askHSet = lift askHSet+MHRWRITER(WL.WriterT w m)+MHRWRITER(WS.WriterT w m)+MHRWRITER(RWSL.RWST r w s m)+MHRWRITER(RWSS.RWST r w s m) -instance (MonadHReader m, Monoid w) => MonadHReader (RWSS.RWST r w s m) where-  type MHRElements (RWSS.RWST r w s m) = MHRElements m-  askHSet = lift askHSet+-- | Ask arbitrary element of hset inside HReader+hask :: (MonadHReader m, HGettable (MHRElements m) e)+      => m e+hask = hget <$> askHSet++-- | Ask arbitrary labeled element of hset in HReader+haskTagged :: (MonadHReader m, HGettable (MHRElements m) (Tagged tag e))+           => proxy tag+           -> m e+haskTagged p = hgetTagged p <$> askHSet