packages feed

hreader 0.2.0 → 1.0.0

raw patch · 4 files changed

+48/−27 lines, 4 filesdep +taggeddep ~hsetPVP ok

version bump matches the API change (PVP)

Dependencies added: tagged

Dependency ranges changed: hset

API changes (from Hackage documentation)

- Control.Monad.HReader.Class: haskLabeledM :: (MonadHReader m, HGetable (HSetElements m) (Labeled label e)) => proxy label -> m e
- Control.Monad.HReader.Class: haskM :: (MonadHReader m, HGetable (HSetElements m) e) => m e
+ Control.Monad.HReader.Class: hask :: (MonadHReader m, HGettable (MHRElements m) e) => m e
+ Control.Monad.HReader.Class: haskTagged :: (MonadHReader m, HGettable (MHRElements m) (Tagged tag e)) => proxy tag -> m e
- Control.Monad.HReader: narrowHReaderT :: (Monad m, SubHSetable els subels eq) => proxy subels -> HReaderT subels m a -> HReaderT els m a
+ Control.Monad.HReader: narrowHReaderT :: (Monad m, SubHSettable els subels) => proxy subels -> HReaderT subels m a -> HReaderT els m a
- Control.Monad.HReader: subHSetHReaderT :: (Monad m, SubHSetable els subels eq) => HReaderT subels m a -> HReaderT els m a
+ Control.Monad.HReader: subHSetHReaderT :: (Monad m, SubHSettable els subels) => HReaderT subels m a -> HReaderT els m a
- Control.Monad.HReader.Class: askHSet :: MonadHReader m => m (HSet (HSetElements m))
+ Control.Monad.HReader.Class: askHSet :: MonadHReader m => m (HSet (MHRElements m))
- Control.Monad.HReader.Class: class (Monad m, Applicative m) => MonadHReader m where type family HSetElements m :: [*]
+ Control.Monad.HReader.Class: class (Monad m, Applicative m) => MonadHReader m where type family MHRElements m :: [*]

Files

CHANGELOG.md view
@@ -1,5 +1,13 @@ # CHANGELOG +## 1.0.0+### Added+* `MHRElemsConstraint`+### Changed+* depenes on `hset` > 2.0.0+* use `tagged` instead of Labeled+* some things renamed, so this version is not backwards compatible+ ## 0.2.0 ### Added * `subHSetHReaderT` run a local reader with a subset of HSet elements
hreader.cabal view
@@ -1,6 +1,6 @@ name:                hreader-version:             0.2.0-synopsis:            Generalization of MonadReader and ReaderT+version:             1.0.0+synopsis:            Generalization of MonadReader and ReaderT using hset license:             BSD3 license-file:        LICENSE author:              Aleksey Uimanov@@ -21,6 +21,7 @@   ghc-options:         -Wall    default-extensions: CPP+                    , ConstraintKinds                     , DataKinds                     , DeriveDataTypeable                     , DeriveGeneric@@ -30,14 +31,16 @@                     , MultiParamTypeClasses                     , StandaloneDeriving                     , TypeFamilies+                    , TypeOperators                     , UndecidableInstances    build-depends:       base  >= 4.7   && < 5                      , exceptions-                     , hset  >= 1.1.0 && < 2.0.0+                     , hset  >= 2.0.0 && < 3.0.0                      , mmorph                      , monad-control                      , mtl+                     , tagged                      , transformers-base    exposed-modules:     Control.Monad.HReader
src/Control/Monad/HReader.hs view
@@ -42,7 +42,7 @@ runHReaderT h (HReaderT r) = runReaderT r h  -- | Run a local reader with a subset of HSet elements.-subHSetHReaderT :: ( Monad m, SubHSetable els subels eq )+subHSetHReaderT :: (Monad m, SubHSettable els subels)                 => HReaderT subels m a -> HReaderT els m a subHSetHReaderT hr = do   hset <- askHSet@@ -61,7 +61,7 @@  -} -narrowHReaderT :: ( Monad m, SubHSetable els subels eq )+narrowHReaderT :: (Monad m, SubHSettable els subels)                => proxy subels -> HReaderT subels m a -> HReaderT els m a narrowHReaderT _ = subHSetHReaderT @@ -76,7 +76,7 @@       local f $ runHReaderT h ma  instance (Monad m, Applicative m) => MonadHReader (HReaderT els m) where-  type HSetElements (HReaderT els m) = els+  type MHRElements (HReaderT els m) = els   askHSet = HReaderT ask  deriving instance MFunctor (HReaderT els)
src/Control/Monad/HReader/Class.hs view
@@ -1,7 +1,8 @@ module Control.Monad.HReader.Class        ( MonadHReader(..)-       , haskM-       , haskLabeledM+       , MHRElemsConstraint+       , hask+       , haskTagged        ) where  @@ -9,6 +10,8 @@ import Control.Monad.List import Control.Monad.Reader import Data.HSet+import Data.Tagged+import GHC.Exts  #if MIN_VERSION_mtl(2, 2, 1) import Control.Monad.Except@@ -19,33 +22,40 @@ 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.Writer.Lazy    as WL+import qualified Control.Monad.Writer.Strict  as WS +-- | Easy generate constraint like+-- __(HGettable (MHRElements m) Int, HGettable (MHRElements m) Bool)__+-- from type list __[Int, Bool]__. Usable to reuse type lists for+-- constraints and concrete HSet.+type family MHRElemsConstraint (m :: * -> *) (els :: [*]) :: Constraint where+  MHRElemsConstraint m '[] = ()+  MHRElemsConstraint m (e ': els) = (HGettable (MHRElements m) e, MHRElemsConstraint m els)  -- | Monad which is a reader of HSet (or just can construct it). class (Monad m, Applicative m) => MonadHReader m where-  type HSetElements m :: [*]-  askHSet :: m (HSet (HSetElements m))+  type MHRElements m :: [*]+  askHSet :: m (HSet (MHRElements m))  -- | Ask arbitrary element of hset inside HReader-haskM :: (MonadHReader m, HGetable (HSetElements m) e)+hask :: (MonadHReader m, HGettable (MHRElements m) e)       => m e-haskM = hget <$> askHSet+hask = hget <$> askHSet  -- | Ask arbitrary labeled element of hset in HReader-haskLabeledM :: (MonadHReader m, HGetable (HSetElements m) (Labeled label e))-             => proxy label -> m e-haskLabeledM p = hgetLabeled p <$> askHSet+haskTagged :: (MonadHReader m, HGettable (MHRElements m) (Tagged tag e))+           => proxy tag+           -> m e+haskTagged p = hgetTagged p <$> askHSet  #define MHR(MONAD)                                        \ instance (MonadHReader m) => MonadHReader (MONAD) where { \-  type HSetElements (MONAD) = HSetElements m ;            \+  type MHRElements (MONAD) = MHRElements m ;            \   askHSet = lift askHSet ;                                \   } @@ -61,17 +71,17 @@ MHR(SS.StateT s m)  instance (MonadHReader m, Monoid w) => MonadHReader (WL.WriterT w m) where-  type HSetElements (WL.WriterT w m) = HSetElements m+  type MHRElements (WL.WriterT w m) = MHRElements m   askHSet = lift askHSet  instance (MonadHReader m, Monoid w) => MonadHReader (WS.WriterT w m) where-  type HSetElements (WS.WriterT w m) = HSetElements m+  type MHRElements (WS.WriterT w m) = MHRElements m   askHSet = lift askHSet  instance (MonadHReader m, Monoid w) => MonadHReader (RWSL.RWST r w s m) where-  type HSetElements (RWSL.RWST r w s m) = HSetElements m+  type MHRElements (RWSL.RWST r w s m) = MHRElements m   askHSet = lift askHSet  instance (MonadHReader m, Monoid w) => MonadHReader (RWSS.RWST r w s m) where-  type HSetElements (RWSS.RWST r w s m) = HSetElements m+  type MHRElements (RWSS.RWST r w s m) = MHRElements m   askHSet = lift askHSet