我有适合我需要的代码:
f :: [IO Int] -> IO [Int]
f [] = return []
f (x:xs) = do
a <- x
as <- f xs
return (a:as)
但我认为会有一种预定义的方式(msum?)
但我看不出怎么做。
欢迎任何帮助。谢谢
是的,它在名称下的标准库中可用sequence
。它具有比您的f
:更通用的类型Monad m => [m a] -> m [a]
,因为它适用于任何类型Monad
,而不仅仅是IO
.
[IO a] -> IO [a]
您可以通过在Hoogle上搜索 type 自己找到它。