Итак, у меня есть что-то вроде:
[IO Blah, IO Blah, IO Blah]
и я действительно хочу просто список Blah с, как я могу это сделать?
Blah
P.S .: Да, я работаю в функции IO.
Использование sequence.
sequence
Оцените каждое действие в последовательности слева направо и соберите результаты.
do blahs <- sequence listOfIoBlah -- now use blahs
Hoogle может быть очень полезным при ответе на подобные вопросы, , если , вы знаете, как сформулировать вопрос как тип, например: http://www.haskell.org/hoogle/?hoogle=%5BIO+a%5D+-%3E+IO+%5Ba%5D
То, что вы хотите, это sequence :: Monad m => [m a] -> m [a]. Работает так, как вы ожидаете: все действия выполняются по порядку, результаты собираются и возвращаются. Обратите внимание, что ничего не возвращается, если все команды не завершены.
sequence :: Monad m => [m a] -> m [a]