На этом шаге мы дадим ее краткую характеристику.
Система ввода-вывода является чисто функциональной благодаря использованию монады IO() для интеграции операций ввода-вывода в функциональный контекст.
Монада ввода-вывода используется в языке Haskell как связующее звено между значениями, присущими функциональному языку, и действиями, характеризующими операции ввода-вывода и императивное программирование в общем.
Таким образом, монада ввода-вывода предоставляет пользователю способ указать последовательное связывание действий.
Однако, с точки зрения программиста на языке Haskell, лучше думать о монаде как об абстрактном типе данных.
В случае монады ввода-вывода абстрактными значениями являются действия. Некоторые операции являются примитивными действиями, соответствующими обычным операциям ввода-вывода.
Специальные операции (методы в классе Monad) последовательно связывают действия, соответствующие последовательным операторам (таким, как "точка с запятой") в языках императивного программирования.
Несмотря на то, что язык Haskell обеспечивает довольно сложные средства ввода-вывода, определённые в библиотеке IO, многие программы можно писать, используя лишь несколько простых функций, которые экспортируются из модуля Prelude.
Все функции ввода-вывода, описанные в следующих шагах, работают с символами.
Заметим только, что обработка символа "Новая строка" будет различаться в различных операционных системах.
Например, два символа ввода "Возврат каретки" и "Перевод строки" могут восприниматься как один символ новой строки. Поэтому функции, работающие с символом "Новая строка", могут ухудшать переносимость программ.
На следующем шаге мы рассмотрим функции вывода по работе с символами.