module Control.Monad.TM
(
(.=<<.)
, (.>>=.)
, anyM
, allM
) where
import Data.Traversable
import Control.Monad hiding (mapM)
import Prelude hiding (mapM)
(.=<<.) ::
(Monad q, Monad m, Traversable m) =>
(a -> q (m b))
-> m a
-> q (m b)
(.=<<.) f =
liftM join . mapM f
(.>>=.) ::
(Monad q, Monad m, Traversable m) =>
m a
-> (a -> q (m b))
-> q (m b)
(.>>=.) =
flip (.=<<.)
anyM ::
Monad m =>
(a -> m Bool)
-> [a]
-> m Bool
anyM _ [] =
return False
anyM f (a:as) =
do z <- f a
if z
then return True
else anyM f as
allM ::
Monad m =>
(a -> m Bool)
-> [a]
-> m Bool
allM _ [] =
return True
allM f (a:as) =
do z <- f a
if z
then allM f as
else return False