Я нахожусь в главе I/O Real World Haskell. Монады не обсуждаются в книге еще в 7 главах. То есть мое понимание ввода-вывода в лучшем случае неполное.
Сейчас я пытаюсь понять функцию mapM. Как я понимаю, функция "выполняет" каждый элемент в списке, который должен быть "действием" (IO monad).
Что не имеет смысла, это этот пример. Почему mapM возвращает другой результат, чем карта для тех же аргументов?
Prelude> map (\x -> [x]) [0, 1, 2] [[0],[1],[2]] Prelude> mapM (\x -> [x]) [0, 1, 2] [[0,1,2]]