从IO操作列表中提取值

时间:2012-03-22 22:10:15

标签: haskell monads

所以我有类似的东西:

[IO Blah, IO Blah, IO Blah]

我真的只想要一个Blah的列表,我该怎么做?

P.S。:是的,我在IO功能中工作。

3 个答案:

答案 0 :(得分:15)

使用sequence

  

从左到右评估序列中的每个操作,并收集结果。

do blahs <- sequence listOfIoBlah
   -- now use blahs

答案 1 :(得分:8)

你想要的是sequence :: Monad m => [m a] -> m [a]。它按预期工作:所有操作按顺序执行,结果被收集并返回。请注意,除非所有命令都已完成,否则不会返回任何内容。

答案 2 :(得分:8)

Hoogle在回答这些问题时非常有用,如果您知道如何将问题表达为类型,例如:http://www.haskell.org/hoogle/?hoogle=%5BIO+a%5D+-%3E+IO+%5Ba%5D