packages feed

hierarchy 0.3.1 → 0.3.1.1

raw patch · 2 files changed

+83/−24 lines, 2 filesdep ~basedep ~transformersdep ~transformers-basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base, transformers, transformers-base, transformers-compat

API changes (from Hackage documentation)

- Control.Cond: instance (Error e, MonadQuery r m) => MonadQuery r (ErrorT e m)
- Control.Cond: instance (Monad m, Functor m) => Alternative (CondT a m)
- Control.Cond: instance (Monad m, Functor m) => Applicative (CondT a m)
- Control.Cond: instance (Monad m, Monoid r) => Monoid (CondT a m r)
- Control.Cond: instance (Monad m, Semigroup r) => Semigroup (CondT a m r)
- Control.Cond: instance (MonadQuery r m, Monoid w) => MonadQuery r (RWST r w s m)
- Control.Cond: instance (Monoid w, MonadQuery r m) => MonadQuery r (WriterT w m)
- Control.Cond: instance Functor m => Functor (CondT a m)
- Control.Cond: instance Functor m => Functor (Recursor a m)
- Control.Cond: instance MFunctor (CondT a)
- Control.Cond: instance MFunctor (Recursor a)
- Control.Cond: instance Monad m => Monad (CondT a m)
- Control.Cond: instance Monad m => MonadPlus (CondT a m)
- Control.Cond: instance Monad m => MonadQuery a (CondT a m)
- Control.Cond: instance Monad m => MonadZip (CondT a m)
- Control.Cond: instance MonadBase b m => MonadBase b (CondT a m)
- Control.Cond: instance MonadBaseControl b m => MonadBaseControl b (CondT r m)
- Control.Cond: instance MonadCatch m => MonadCatch (CondT a m)
- Control.Cond: instance MonadCont m => MonadCont (CondT a m)
- Control.Cond: instance MonadError e m => MonadError e (CondT a m)
- Control.Cond: instance MonadFix m => MonadFix (CondT a m)
- Control.Cond: instance MonadIO m => MonadIO (CondT a m)
- Control.Cond: instance MonadMask m => MonadMask (CondT a m)
- Control.Cond: instance MonadQuery r m => MonadQuery r (ExceptT e m)
- Control.Cond: instance MonadQuery r m => MonadQuery r (IdentityT m)
- Control.Cond: instance MonadQuery r m => MonadQuery r (ListT m)
- Control.Cond: instance MonadQuery r m => MonadQuery r (MaybeT m)
- Control.Cond: instance MonadQuery r m => MonadQuery r (ReaderT r m)
- Control.Cond: instance MonadQuery r m => MonadQuery r (StateT s m)
- Control.Cond: instance MonadQuery r' m => MonadQuery r' (ContT r m)
- Control.Cond: instance MonadReader r m => MonadReader r (CondT a m)
- Control.Cond: instance MonadState s m => MonadState s (CondT a m)
- Control.Cond: instance MonadThrow m => MonadThrow (CondT a m)
- Control.Cond: instance MonadTrans (CondT a)
- Control.Cond: instance MonadWriter w m => MonadWriter w (CondT a m)
- Control.Cond: instance Monoid (Recursor a m r)
- Control.Cond: instance Semigroup (Recursor a m r)
+ Control.Cond: ifM :: Monad m => m Bool -> m s -> m s -> m s
+ Control.Cond: instance (Control.Cond.MonadQuery r m, GHC.Base.Monoid w) => Control.Cond.MonadQuery r (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Cond: instance (Control.Cond.MonadQuery r m, GHC.Base.Monoid w) => Control.Cond.MonadQuery r (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Cond: instance (Control.Monad.Trans.Error.Error e, Control.Cond.MonadQuery r m) => Control.Cond.MonadQuery r (Control.Monad.Trans.Error.ErrorT e m)
+ Control.Cond: instance (GHC.Base.Monad m, Data.Semigroup.Semigroup r) => Data.Semigroup.Semigroup (Control.Cond.CondT a m r)
+ Control.Cond: instance (GHC.Base.Monad m, GHC.Base.Functor m) => GHC.Base.Alternative (Control.Cond.CondT a m)
+ Control.Cond: instance (GHC.Base.Monad m, GHC.Base.Functor m) => GHC.Base.Applicative (Control.Cond.CondT a m)
+ Control.Cond: instance (GHC.Base.Monad m, GHC.Base.Monoid r) => GHC.Base.Monoid (Control.Cond.CondT a m r)
+ Control.Cond: instance (GHC.Base.Monoid w, Control.Cond.MonadQuery r m) => Control.Cond.MonadQuery r (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Cond: instance (GHC.Base.Monoid w, Control.Cond.MonadQuery r m) => Control.Cond.MonadQuery r (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.Identity.IdentityT m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.List.ListT m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.Maybe.MaybeT m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Cond: instance Control.Cond.MonadQuery r m => Control.Cond.MonadQuery r (Control.Monad.Trans.State.Strict.StateT s m)
+ Control.Cond: instance Control.Cond.MonadQuery r' m => Control.Cond.MonadQuery r' (Control.Monad.Trans.Cont.ContT r m)
+ Control.Cond: instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Morph.MFunctor (Control.Cond.CondT a)
+ Control.Cond: instance Control.Monad.Morph.MFunctor (Control.Cond.Recursor a)
+ Control.Cond: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Cond.CondT a m)
+ Control.Cond: instance Control.Monad.Trans.Class.MonadTrans (Control.Cond.CondT a)
+ Control.Cond: instance Control.Monad.Trans.Control.MonadBaseControl b m => Control.Monad.Trans.Control.MonadBaseControl b (Control.Cond.CondT r m)
+ Control.Cond: instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Cond.CondT a m)
+ Control.Cond: instance Data.Semigroup.Semigroup (Control.Cond.Recursor a m r)
+ Control.Cond: instance GHC.Base.Functor m => GHC.Base.Functor (Control.Cond.CondT a m)
+ Control.Cond: instance GHC.Base.Functor m => GHC.Base.Functor (Control.Cond.Recursor a m)
+ Control.Cond: instance GHC.Base.Monad m => Control.Cond.MonadQuery a (Control.Cond.CondT a m)
+ Control.Cond: instance GHC.Base.Monad m => Control.Monad.Zip.MonadZip (Control.Cond.CondT a m)
+ Control.Cond: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Cond.CondT a m)
+ Control.Cond: instance GHC.Base.Monad m => GHC.Base.MonadPlus (Control.Cond.CondT a m)
+ Control.Cond: instance GHC.Base.Monoid (Control.Cond.Recursor a m r)
+ Control.Cond: unlessM :: Monad m => m Bool -> m s -> m ()
+ Control.Cond: whenM :: Monad m => m Bool -> m s -> m ()

Files

Control/Cond.hs view
@@ -26,7 +26,8 @@     , accept, ignore, norecurse, prune      -- * Boolean logic-    , matches, if_, when_, unless_, or_, and_, not_+    , matches, ifM, whenM, unlessM+    , if_, when_, unless_, or_, and_, not_      -- * helper functions     , recurse@@ -179,7 +180,7 @@         (Just r,  Continue)  -> getCondT (k r)         (Just r,  Recurse n) -> getCondT (k r) >>= \case             (v, Continue) -> return (v, Recurse (n >>= k))-            x@_ -> return x+            x             -> return x     {-# INLINEABLE (>>=) #-} #if __GLASGOW_HASKELL__ >= 710     {-# SPECIALIZE (>>=)@@ -220,10 +221,7 @@         case r of             x@(Just _, _) -> return x             _ -> g-    {-# INLINEABLE (<|>) #-}-#if __GLASGOW_HASKELL__ >= 710-    {-# SPECIALIZE (<|>) :: CondT a IO a -> CondT a IO a -> CondT a IO a #-}-#endif+    {-# INLINE (<|>) #-}  instance Monad m => MonadPlus (CondT a m) where     mzero = CondT $ return recurse'@@ -233,14 +231,13 @@         case r of             x@(Just _, _) -> return x             _ -> g-    {-# INLINEABLE mplus #-}-#if __GLASGOW_HASKELL__ >= 710-    {-# SPECIALIZE mplus :: CondT a IO a -> CondT a IO a -> CondT a IO a #-}-#endif+    {-# INLINE mplus #-}  instance MonadError e m => MonadError e (CondT a m) where     throwError = CondT . throwError+    {-# INLINE throwError #-}     catchError (CondT m) h = CondT $ m `catchError` \e -> getCondT (h e)+    {-# INLINE catchError #-}  instance MonadThrow m => MonadThrow (CondT a m) where     throwM = CondT . throwM@@ -310,6 +307,7 @@  instance Monad m => MonadZip (CondT a m) where     mzipWith = liftM2+    {-# INLINE mzipWith #-}  -- A deficiency of this instance is that recursion uses the same initial 'a'. instance MonadFix m => MonadFix (CondT a m) where@@ -325,16 +323,14 @@ runCondT :: Monad m => a -> CondT a m r -> m ((Maybe r, Maybe (CondT a m r)), a) runCondT a c@(CondT (StateT s)) = go `liftM` s a   where+    {-# INLINE go #-}     go (p, a') = (second (recursorToMaybe c) p, a') +    {-# INLINE recursorToMaybe #-}     recursorToMaybe _ Stop        = Nothing     recursorToMaybe p Continue    = Just p     recursorToMaybe _ (Recurse n) = Just n-{-# INLINEABLE runCondT #-}-#if __GLASGOW_HASKELL__ >= 710-{-# SPECIALIZE runCondT-      :: a -> CondT a IO r -> IO ((Maybe r, Maybe (CondT a IO r)), a) #-}-#endif+{-# INLINE runCondT #-}  runCond :: a -> Cond a r -> Maybe r runCond = ((fst . fst . runIdentity) .) . runCondT@@ -393,85 +389,137 @@  instance MonadQuery r m => MonadQuery r (ReaderT r m) where     query = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance (MonadQuery r m, Monoid w) => MonadQuery r (LazyRWS.RWST r w s m) where     query = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance (MonadQuery r m, Monoid w)          => MonadQuery r (StrictRWS.RWST r w s m) where     query = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  -- All of these instances need UndecidableInstances, because they do not satisfy -- the coverage condition.  instance MonadQuery r' m => MonadQuery r' (ContT r m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance (Error e, MonadQuery r m) => MonadQuery r (ErrorT e m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance MonadQuery r m => MonadQuery r (ExceptT e m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance MonadQuery r m => MonadQuery r (IdentityT m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance MonadQuery r m => MonadQuery r (ListT m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance MonadQuery r m => MonadQuery r (MaybeT m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance MonadQuery r m => MonadQuery r (Lazy.StateT s m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance MonadQuery r m => MonadQuery r (Strict.StateT s m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance (Monoid w, MonadQuery r m) => MonadQuery r (Lazy.WriterT w m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  instance (Monoid w, MonadQuery r m) => MonadQuery r (Strict.WriterT w m) where     query   = lift query+    {-# INLINE query #-}     queries = lift . queries+    {-# INLINE queries #-}     update = lift . update+    {-# INLINE update #-}     updates = lift . updates+    {-# INLINE updates #-}  guardM :: MonadPlus m => m Bool -> m () guardM = (>>= guard)@@ -515,8 +563,7 @@ norecurse = CondT $ return (Just (), Stop) {-# INLINE norecurse #-} --- | 'prune' is a synonym for both ignoring an entry and its descendents. It---   is the same as @ignore >> norecurse@.+-- | 'prune' is a synonym for both ignoring an entry and its descendents. prune :: Monad m => CondT a m r prune = CondT $ return (Nothing, Stop) {-# INLINE prune #-}@@ -533,6 +580,10 @@ matches m = (const True `liftM` m) `mplus` return False {-# INLINE matches #-} +ifM :: Monad m => m Bool -> m s -> m s -> m s+ifM c x y = c >>= \b -> if b then x else y+{-# INLINE ifM #-}+ -- | A variant of ifM which branches on whether the condition succeeds or not. --   Note that @if_ x@ is equivalent to @ifM (matches x)@, and is provided --   solely for convenience.@@ -547,6 +598,10 @@ if_ c x y = matches c >>= \b -> if b then x else y {-# INLINE if_ #-} +whenM :: Monad m => m Bool -> m s -> m ()+whenM c x = ifM c (x >> return ()) (return ())+{-# INLINE whenM #-}+ -- | 'when_' is just like 'when', except that it executes the body if the --   condition passes, rather than based on a Bool value. --@@ -559,6 +614,10 @@ when_ :: MonadPlus m => m r -> m s -> m () when_ c x = if_ c (x >> return ()) (return ()) {-# INLINE when_ #-}++unlessM :: Monad m => m Bool -> m s -> m ()+unlessM c x = ifM c (return ()) (x >> return ())+{-# INLINE unlessM #-}  -- | 'when_' is just like 'when', except that it executes the body if the --   condition fails, rather than based on a Bool value.
hierarchy.cabal view
@@ -1,5 +1,5 @@ name:          hierarchy-version:       0.3.1+version:       0.3.1.1 synopsis:      Pipes-based library for predicated traversal of generated trees description:   Pipes-based library for predicated traversal of generated trees homepage:      https://github.com/jwiegley/hierarchy@@ -23,15 +23,15 @@       Control.Cond     , Pipes.Tree   build-depends:       -      base                >=4.7  && <4.9-    , transformers        >=0.3  && <0.5-    , transformers-base   >=0.3  && <0.5-    , transformers-compat >=0.3  && <0.5+      base                >=4.7  && <4.10+    , transformers        >=0.3  && <0.6+    , transformers-base   >=0.3  && <0.6+    , transformers-compat >=0.3  && <0.6     , exceptions          >=0.8  && <0.9     , mmorph              >=1.0  && <1.1     , mtl                 >=2.1  && <2.3     , monad-control       >=1.0  && <1.1-    , semigroups          >=0.16 && <0.17+    , semigroups          >=0.16 && <0.19     , free                >=4.12 && <4.13     , pipes               >=4.1  && <4.2   default-language:    Haskell2010@@ -58,7 +58,7 @@       base >=3     , hierarchy     , pipes              >=4.1  && <4.2-    , transformers       >=0.3  && <0.5+    , transformers       >=0.3  && <0.6     , mtl                >=2.1  && <2.3     , hspec              >=1.4.4     , hspec-expectations >=0.3