module Bool ( whenM , unlessM , ifM , guardM , bool ) where import Prelude import Control.Monad (MonadPlus, when, unless, guard) bool :: a -> a -> Bool -> a bool f t p = if p then t else f whenM :: Monad m => m Bool -> m () -> m () whenM p m = p >>= flip when m unlessM :: Monad m => m Bool -> m () -> m () unlessM p m = p >>= flip unless m ifM :: Monad m => m Bool -> m a -> m a -> m a ifM p x y = p >>= \b -> if b then x else y guardM :: MonadPlus m => m Bool -> m () guardM f = guard =<< f