packages feed

cond 0.0 → 0.0.1

raw patch · 2 files changed

+25/−3 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Control.Cond: guardM :: MonadPlus m => m Bool -> m ()
+ Control.Cond: notM :: Monad m => m Bool -> m Bool
+ Control.Cond: unlessM :: Monad m => m Bool -> m () -> m ()
+ Control.Cond: whenM :: Monad m => m Bool -> m () -> m ()

Files

cond.cabal view
@@ -1,5 +1,5 @@ Name: cond-Version: 0.0+Version: 0.0.1 Synopsis: Basic conditional operators with monadic variants. Category: Control, Logic, Monad License: BSD3
src/Control/Cond.hs view
@@ -7,9 +7,11 @@          -- * Lisp-style conditional operators         , cond, condPlus          -- * Lifted conditional and boolean operators-       , ifM, (<||>), (<&&>), condM, condPlusM+       , ifM, (<||>), (<&&>), notM, condM, condPlusM+         -- * Lifted guard and when+       , guardM, whenM, unlessM         ) where-import Control.Monad ( MonadPlus (mzero) )+import Control.Monad ( MonadPlus (mzero), guard, liftM )  infixr 1 ?? infixr 2 <||>@@ -76,6 +78,11 @@ (<&&>) a b = ifM a b (return False) {-# INLINE (<&&>) #-} +-- |Lifted boolean negation.+notM :: Monad m => m Bool -> m Bool+notM = liftM not+{-# INLINE notM #-}+ -- |'cond' lifted to 'Monad'. If no conditions match, a runtime exception -- is thrown. condM :: Monad m => [(m Bool, m a)] -> m a @@ -87,3 +94,18 @@ condPlusM :: MonadPlus m => [(m Bool, m a)] -> m a condPlusM [] = mzero condPlusM ((p, v):ls) = ifM p v (condPlusM ls)++-- |a variant of 'Control.Monad.when' with a monadic predicate.+whenM :: Monad m => m Bool -> m () -> m ()+whenM p m = ifM p m (return ())+{-# INLINE whenM #-}++-- |a variant of 'Control.Monad.unless' with a monadic predicate.+unlessM :: Monad m => m Bool -> m () -> m ()+unlessM p m = ifM (notM p) m (return ())+{-# INLINE unlessM #-}++-- |a variant of 'Control.Monad.guard' with a monadic predicate.+guardM :: MonadPlus m => m Bool -> m ()+guardM = (guard =<<)+{-# INLINE guardM #-}