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 +1/−1
- src/Control/Cond.hs +24/−2
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 #-}