import Control.Monad ( guard ) do a <- [ 1 .. 4 ] b <- [ 2 .. 3 ] guard $ even (a + b) return ( a * b )
[ 1 .. 4 ] >>= \ a ->
[ 2 .. 3 ] >>= \ b ->
if ( even (a+b) )
then return ( a * b ) else mzero
class Monad m => MonadPlus m where
mzero :: m a ; ...
instance MonadPlus [] where mzero = []