[project @ 1999-10-29 01:16:48 by andy]
[ghc-hetmet.git] / ghc / lib / std / Monad.lhs
index f95e1cb..b1c5a9c 100644 (file)
@@ -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,6 +80,13 @@ 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) }
@@ -93,6 +102,7 @@ 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
@@ -114,9 +124,14 @@ 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}