IfElse 0.82 → 0.85
raw patch · 2 files changed
+70/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Monad.IfElse: maybeMP :: MonadPlus m => Maybe a -> m a
+ Control.Monad.IfElse: ncondM :: Monad m => [(m Bool, m ())] -> m ()
+ Control.Monad.IfElse: return' :: Monad m => a -> m a
+ Control.Monad.IfElse: returning :: Monad m => (a -> m b) -> (a -> m a)
+ Control.Monad.IfElse: untilM :: Monad m => m Bool -> m () -> m ()
+ Control.Monad.IfElse: whileM :: Monad m => m Bool -> m () -> m ()
- Control.Monad.IfElse: acond :: (Monad m) => [(Maybe a, a -> m ())] -> m ()
+ Control.Monad.IfElse: acond :: Monad m => [(Maybe a, a -> m ())] -> m ()
- Control.Monad.IfElse: aif :: (Monad m) => Maybe a -> (a -> m b) -> m b -> m b
+ Control.Monad.IfElse: aif :: Monad m => Maybe a -> (a -> m b) -> m b -> m b
- Control.Monad.IfElse: aifM :: (Monad m) => m (Maybe a) -> (a -> m b) -> m b -> m b
+ Control.Monad.IfElse: aifM :: Monad m => m (Maybe a) -> (a -> m b) -> m b -> m b
- Control.Monad.IfElse: awhen :: (Monad m) => Maybe a -> (a -> m ()) -> m ()
+ Control.Monad.IfElse: awhen :: Monad m => Maybe a -> (a -> m ()) -> m ()
- Control.Monad.IfElse: awhenM :: (Monad m) => m (Maybe a) -> (a -> m ()) -> m ()
+ Control.Monad.IfElse: awhenM :: Monad m => m (Maybe a) -> (a -> m ()) -> m ()
- Control.Monad.IfElse: cond :: (Monad m) => [(Bool, m ())] -> m ()
+ Control.Monad.IfElse: cond :: Monad m => [(Bool, m ())] -> m ()
- Control.Monad.IfElse: condM :: (Monad m) => [(m Bool, m ())] -> m ()
+ Control.Monad.IfElse: condM :: Monad m => [(m Bool, m ())] -> m ()
- Control.Monad.IfElse: whenM :: (Monad m) => m Bool -> m () -> m ()
+ Control.Monad.IfElse: whenM :: Monad m => m Bool -> m () -> m ()
Files
- Control/Monad/IfElse.hs +68/−0
- IfElse.cabal +2/−2
Control/Monad/IfElse.hs view
@@ -70,6 +70,18 @@ aifM :: Monad m => m (Maybe a) -> (a -> m b) -> m b -> m b aifM test ifclause elseclause = test >>= \t -> aif t ifclause elseclause +-- | Contrapositive of whenM, if not x then do y+unlessM a = whenM (liftM not $ a)++-- | unless-else chain.+ncond [] = return ()+ncond ((test , action) : rest) = if not test then action else ncond rest++-- | monadic unless-else chain+ncondM :: Monad m => [(m Bool, m ())] -> m ()+ncondM [] = return ()+ncondM ((test , action) : rest) = test >>= \t -> if not t then action else ncondM rest+ -- | IO lifted @ && @ (&&^) = liftM2 (&&) @@ -80,6 +92,14 @@ (>>?) = when infixl 1 >>? +-- | unless the left side is true, perform the right action+(>>!) = unless+infixl 1 >>!++-- | unless the (monadic) left side is true, perform the right action+(>>=>>!) = unlessM+infixl 1 >>=>>!+ -- | Bind the result of the last expression in an anaphoric when. (>>=?) = awhen infixl 1 >>=?@@ -91,3 +111,51 @@ -- | composition of @ >>= @ and @ >>=? @ (>>=>>=?) = awhenM infixl 1 >>=>>=?++--+-- The following is from Control.Monad.Extras by Wren Thornton.+--++-- | Execute a monadic action so long as a monadic boolean returns+-- true.+{-# SPECIALIZE whileM :: IO Bool -> IO () -> IO () #-}+whileM :: (Monad m) => m Bool -> m () -> m ()+whileM mb m = do b <- mb ; when b (m >> whileM mb m)+++-- Named with M because 'Prelude.until' exists+-- | Negation of 'whileM': execute an action so long as the boolean+-- returns false.+{-# SPECIALIZE untilM :: IO Bool -> IO () -> IO () #-}+untilM :: (Monad m) => m Bool -> m () -> m ()+untilM mb m = do b <- mb ; unless b (m >> untilM mb m)+++-- | Strict version of 'return' because usually we don't need that+-- extra thunk.+{-# INLINE return' #-}+return' :: (Monad m) => a -> m a+return' x = return $! x+++-- | Take an action and make it into a side-effecting 'return'.+-- Because I seem to keep running into @m ()@ and the like.+infixr 8 `returning`+{-# INLINE returning #-}+returning :: (Monad m) => (a -> m b) -> (a -> m a)+f `returning` x = f x >> return x+++-- For reference this is also helpful:+-- > liftM2 (>>) f g == \x -> f x >> g x+++-- | This conversion is common enough to make a name for.+{-# INLINE maybeMP #-}+maybeMP :: (MonadPlus m) => Maybe a -> m a+maybeMP = maybe mzero return++-- This rule should only fire when type-safe+{-# RULES "maybeMP/id" maybeMP = id #-}++
IfElse.cabal view
@@ -1,9 +1,9 @@ Name: IfElse-Version: 0.82+Version: 0.85 Cabal-Version: >= 1.2 License: BSD3 License-File: LICENSE-Author: J.R. Heard+Author: J.R. Heard and Wren Thornton Maintainer: J.R. Heard Category: Control Description: Anaphoric and miscellaneous useful control-flow