summaryrefslogtreecommitdiff
path: root/Utility/Monad.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-03-17 00:22:05 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-03-17 00:38:40 -0400
commita362c46b70c45872ff8c479ba5a6716cf13cc8d8 (patch)
treee8f08204dc679a1d7c23b5cd466606e7877a2469 /Utility/Monad.hs
parentd6624b6c798df401eb9e715810537d2b93935a76 (diff)
fun with symbols
Nothing at all on hackage is using <&&> or <||>. (Also, <&&> should short-circuit on failure.)
Diffstat (limited to 'Utility/Monad.hs')
-rw-r--r--Utility/Monad.hs16
1 files changed, 7 insertions, 9 deletions
diff --git a/Utility/Monad.hs b/Utility/Monad.hs
index 5cc243290..9c85d31ca 100644
--- a/Utility/Monad.hs
+++ b/Utility/Monad.hs
@@ -8,7 +8,7 @@
module Utility.Monad where
import Data.Maybe
-import Control.Monad (liftM, liftM2)
+import Control.Monad (liftM)
{- Return the first value from a list, if any, satisfying the given
- predicate -}
@@ -31,15 +31,13 @@ ifM cond (thenclause, elseclause) = do
c <- cond
if c then thenclause else elseclause
-{- monadic ||
- -
- - Compare with (||) <$> ma <*> mb, which always runs both ma and mb. -}
-orM :: Monad m => m Bool -> m Bool -> m Bool
-orM ma mb = ifM ma ( return True , mb )
+{- short-circuiting monadic || -}
+(<||>) :: Monad m => m Bool -> m Bool -> m Bool
+ma <||> mb = ifM ma ( return True , mb )
-{- monadic && (for completeness) -}
-andM :: Monad m => m Bool -> m Bool -> m Bool
-andM = liftM2 (&&)
+{- short-circuiting monadic && -}
+(<&&>) :: Monad m => m Bool -> m Bool -> m Bool
+ma <&&> mb = ifM ma ( mb , return False )
{- Runs an action, passing its value to an observer before returning it. -}
observe :: Monad m => (a -> m b) -> m a -> m a