6

我有适合我需要的代码:

f :: [IO Int] -> IO [Int]
f [] = return []
f (x:xs) = do 
  a <- x
  as <- f xs
  return (a:as)

但我认为会有一种预定义的方式(msum?)

但我看不出怎么做。

欢迎任何帮助。谢谢

4

1 回答 1

22

是的,它在名称下的标准库中可用sequence。它具有比您的f:更通用的类型Monad m => [m a] -> m [a],因为它适用于任何类型Monad,而不仅仅是IO.

[IO a] -> IO [a]您可以通过在Hoogle上搜索 type 自己找到它。

于 2013-04-05T11:41:27.257 回答