libcspm-0.2.0: src/Util/Monad.hs
-- | Misc utility functions that are defined on monads.
module Util.Monad (
concatMapM,
andM,
orM,
($$)
) where
import Control.Monad
concatMapM :: (Monad m) => (a -> m [b]) -> [a] -> m [b]
concatMapM f xs = liftM concat (mapM f xs)
andM :: (Monad m) => [m Bool] -> m Bool
andM [m] = m
andM (m:ms) = do
b <- m
if b then andM ms else return False
orM :: (Monad m) => [m Bool] -> m Bool
orM [m] = m
orM (m:ms) = do
b <- m
if not b then orM ms else return True
($$) :: Monad m => m (a -> b) -> m a -> m b
($$) fm argm = do
f <- fm
arg <- argm
return $ f arg