[project @ 1999-11-25 10:36:48 by simonpj]
authorsimonpj <unknown>
Thu, 25 Nov 1999 10:36:48 +0000 (10:36 +0000)
committersimonpj <unknown>
Thu, 25 Nov 1999 10:36:48 +0000 (10:36 +0000)
Express sequence in terms of foldr

ghc/lib/std/Monad.lhs

index b1c5a9c..4c8c3ed 100644 (file)
@@ -88,12 +88,14 @@ instance MonadPlus Maybe where
 -- 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) }
+{-# INLINE sequence #-}
+sequence ms = foldr k (return []) ms
+           where
+             k m m' = do { x <- m; xs <- m'; return (x:xs) }
 
 sequence_        :: Monad m => [m a] -> m () 
 {-# INLINE sequence_ #-}
-sequence_        =  foldr (>>) (return ())
+sequence_ ms     =  foldr (>>) (return ()) ms
 
 mapM            :: Monad m => (a -> m b) -> [a] -> m [b]
 {-# INLINE mapM #-}