module Control.Monad( module Control.Monad,module Monad,module Data.Functor, Monad(..),(=<<)) where import Monad import Data.Functor replicateM n x = sequence (replicate n x) replicateM_ n x = sequence_ (replicate n x) forM_ x f = mapM_ f x infixr 1 <=<,>=> -- | Kleisli composition, right-to-left (monadic function composition) (f <=< g) x = f =<< g x (g >=> f) x = g x >>= f -- ^ Kleisli composition, left-to-right -- | Generalization of filter. @filter = mfilter :: (a->Bool) -> [a] -> [a]@ mfilter p ma = do a <- ma; if p a then return a else mzero forever m = loop where loop = m >> loop