-#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]
-{-# 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_ ms = foldr (>>) (return ()) ms
-
-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
-