X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2FMonad.lhs;h=b1c5a9cf5e0ecea760ba3f4f94c02a90408c0dce;hb=f608faec774d5d2cd895240c1e0e66a48aa6cbe3;hp=8f631159bf5d18fa08976917557dddebc77d4a1e;hpb=90dc4201b32723538fcf2404f51de74d4a8dbc28;p=ghc-hetmet.git diff --git a/ghc/lib/std/Monad.lhs b/ghc/lib/std/Monad.lhs index 8f63115..b1c5a9c 100644 --- a/ghc/lib/std/Monad.lhs +++ b/ghc/lib/std/Monad.lhs @@ -39,12 +39,14 @@ module Monad , (=<<) -- :: (Monad m) => (a -> m b) -> m a -> m b ) where +#ifndef __HUGS__ import PrelList import PrelTup import PrelBase import PrelMaybe ( Maybe(..) ) infixr 1 =<< +#endif \end{code} %********************************************************* @@ -78,18 +80,29 @@ instance MonadPlus Maybe where %********************************************************* \begin{code} +#ifdef __HUGS__ +-- These functions are defined in the Prelude. +-- sequence :: Monad m => [m a] -> m [a] +-- sequence_ :: Monad m => [m a] -> m () +-- mapM :: Monad m => (a -> m b) -> [a] -> m [b] +-- mapM_ :: Monad m => (a -> m b) -> [a] -> m () +#else sequence :: Monad m => [m a] -> m [a] sequence [] = return [] sequence (m:ms) = do { x <- m; xs <- sequence ms; return (x:xs) } sequence_ :: Monad m => [m a] -> m () +{-# INLINE sequence_ #-} sequence_ = foldr (>>) (return ()) mapM :: Monad m => (a -> m b) -> [a] -> m [b] +{-# INLINE mapM #-} mapM f as = sequence (map f as) mapM_ :: Monad m => (a -> m b) -> [a] -> m () +{-# INLINE mapM_ #-} mapM_ f as = sequence_ (map f as) +#endif guard :: MonadPlus m => Bool -> m () guard pred @@ -108,11 +121,17 @@ filterM predM (x:xs) = do -- This subsumes the list-based concat function. msum :: MonadPlus m => [m a] -> m a +{-# INLINE msum #-} msum = foldr mplus mzero +#ifdef __HUGS__ +-- This function is defined in the Prelude. +--(=<<) :: Monad m => (a -> m b) -> m a -> m b +#else {-# SPECIALISE (=<<) :: (a -> [b]) -> [a] -> [b] #-} (=<<) :: Monad m => (a -> m b) -> m a -> m b f =<< x = x >>= f +#endif \end{code}