Извлечь значения из списка действий ввода-вывода - PullRequest
10 голосов
/ 23 марта 2012

Итак, у меня есть что-то вроде:

[IO Blah, IO Blah, IO Blah]

и я действительно хочу просто список Blah с, как я могу это сделать?

P.S .: Да, я работаю в функции IO.

Ответы [ 3 ]

16 голосов
/ 23 марта 2012

Использование sequence.

Оцените каждое действие в последовательности слева направо и соберите результаты.

do blahs <- sequence listOfIoBlah
   -- now use blahs
9 голосов
/ 23 марта 2012

Hoogle может быть очень полезным при ответе на подобные вопросы, , если , вы знаете, как сформулировать вопрос как тип, например: http://www.haskell.org/hoogle/?hoogle=%5BIO+a%5D+-%3E+IO+%5Ba%5D

8 голосов
/ 23 марта 2012

То, что вы хотите, это sequence :: Monad m => [m a] -> m [a]. Работает так, как вы ожидаете: все действия выполняются по порядку, результаты собираются и возвращаются. Обратите внимание, что ничего не возвращается, если все команды не завершены.

...