{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE Safe #-} module Bool ( whenM , unlessM , ifM , guardM , bool ) where import Control.Monad (Monad, MonadPlus, guard, unless, when, (=<<), (>>=)) import Data.Bool (Bool) import Data.Function (flip) 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