packages feed

hreader 1.0.1 → 1.0.2

raw patch · 5 files changed

+117/−3 lines, 5 filesdep +hreaderdep ~basedep ~exceptionsdep ~hsetPVP ok

version bump matches the API change (PVP)

Dependencies added: hreader

Dependency ranges changed: base, exceptions, hset

API changes (from Hackage documentation)

+ Control.Monad.HReader: instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.HReader.HReaderT els m)

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # CHANGELOG +## 1.0.2+### Added+* added forgotten `MonadMask` instance+ ## 1.0.1 ### Changed * fix `Applicative` constraints for base < 4.8
+ examples/Main.hs view
@@ -0,0 +1,93 @@+module Main where++import Control.Monad.Base+import Control.Monad.HReader+import Data.HSet++type ListA = '[Int, Bool, Char]++type ListB = '[Int, Bool]++type MonadA m =+  ( MHRElemsConstraint m ListA+  , MonadBase IO m+  )++type MonadB m =+  ( MHRElemsConstraint m ListB+  , MonadBase IO m+  )++printInt+  :: (MonadBase IO m, MonadHReader m, HGettable (MHRElements m) Int)+  => m ()+printInt = do+  int <- hask+  liftBase $ print $ "int: " ++ show (int :: Int)++printBool+  :: (MonadBase IO m, MonadHReader m, HGettable (MHRElements m) Bool)+  => m ()+printBool = do+  b <- hask+  liftBase $ print $ "bool: " ++ show (b :: Bool)++printChar+  :: (MonadBase IO m, MonadHReader m, HGettable (MHRElements m) Char)+  => m ()+printChar = do+  c <- hask+  liftBase $ print $ "char: " ++ show (c :: Char)++monadA :: (MonadA m) => m ()+monadA = do+  liftBase $ print "monad A"+  printInt+  printBool+  printChar+  monadB++monadB :: (MonadB m) => m ()+monadB = do+  liftBase $ print "monad B"+  printInt+  printBool++runB :: (AllHGettable els ListB) => HSet els -> IO ()+runB h = do+  print "performing some IO actions around B"+  runHReaderT h monadB++runA :: (AllHGettable els ListA) => HSet els -> IO ()+runA h = do+  print "performing some IO actions around A"+  runHReaderT h monadA++runAinB :: (MonadB m) => m ()+runAinB = do+  liftBase $ print "running A in B"+  h <- askHSet+  let c = 'b'+      hb :: HSet ListB+      hb = subHSet h+      ha = HSCons c hb+  liftBase $ runA ha++runBinA :: (MonadA m) => m ()+runBinA = do+  liftBase $ print "running B in A"+  h <- askHSet+  liftBase $ runB h++main :: IO ()+main = do+  let+    ha :: HSet ListA+    ha = HSCons 10 $ HSCons True $ HSCons 'c' HSNil+    hb :: HSet ListB+    hb = subHSet ha+  runHReaderT ha monadA+  runHReaderT ha monadB+  runHReaderT hb monadB+  runHReaderT ha runBinA+  runHReaderT hb runAinB
hreader.cabal view
@@ -1,5 +1,5 @@ name:                hreader-version:             1.0.1+version:             1.0.2 synopsis:            Generalization of MonadReader and ReaderT using hset license:             BSD3 license-file:        LICENSE@@ -45,3 +45,20 @@    exposed-modules:     Control.Monad.HReader                      , Control.Monad.HReader.Class+++test-suite examples+  type:                exitcode-stdio-1.0+  default-language:    Haskell2010+  ghc-options:        -Wall+  hs-source-dirs:      examples+  main-is:             Main.hs++  default-extensions: ConstraintKinds+                    , DataKinds+                    , FlexibleContexts++  build-depends: base+               , hreader+               , hset+               , transformers-base
src/Control/Monad/HReader.hs view
@@ -35,7 +35,7 @@     } deriving ( Functor, Applicative, Monad, MonadIO                , MonadError e, MonadCont, MonadWriter w                , MonadState s, MonadBase b-               , MonadThrow, MonadCatch+               , MonadThrow, MonadCatch, MonadMask                , Typeable, Generic  )  runHReaderT :: HSet els -> HReaderT els m a -> m a
src/Control/Monad/HReader/Class.hs view
@@ -34,7 +34,7 @@ -- 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 '[] = (MonadHReader m)   MHRElemsConstraint m (e ': els) = (HGettable (MHRElements m) e, MHRElemsConstraint m els)  -- | Monad which is a reader of HSet (or just can construct it).