к вопросу о понимании IO-монады и императивщины в хаскелл, помогает считать что в "IO a" хранится императивная программа, возвращающая a на выходе. Программа на хаскелл на самом деле занимается тем, что конструирует императивную программу из "кирпичиков" с помощью оператора композиции (»). main - специальная функция, которую вычисляет рантайм, чтобы получить императивную программу для выполнения