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 +76/−17
- hierarchy.cabal +7/−7
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