module Data.Bool.Tools ( (&&&), (|||), whether ) where (&&&), (|||) :: Monad m => m Bool -> m Bool -> m Bool p1 &&& p2 = do b1 <- p1 b2 <- p2 return $ b1 && b2 p1 ||| p2 = do b1 <- p1 b2 <- p2 return $ b1 || b2 whether :: a -> a -> Bool -> a whether x _ True = x whether _ y False = y