On Thu, May 17, 2007 at 11:22:34AM +0100, Simon Marlow wrote: > sequence still isn't tail-recursive, although sequence_ is. If you want a > tail-recursive sequence, the only way to do it is like this: > > sequence' :: [IO a] -> IO [a] > sequence' ms = do > let as = map unsafePerformIO ms > foldr seq (return ()) as > return as
sequence :: Monad m => [m a] -> m [a] sequence ms = reverse `liftM` sequence' [] ms sequence' l [] = return l sequence' l (m:ms) = m >>= \x -> sequence' (x:l) ms Stefan _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
