Концептуально кажется, что вычисление, которое выполняет вывод, сильно отличается от вычисления, которое выполняет только ввод. Последнее, в определенном смысле, намного чище.
Я, например, хотел бы иметь способ отделить части моей программы, предназначенные только для ввода, от тех, которые могут действительно что-то записывать.
Итак, почему нет ли только монады ввода?
Есть ли причина, по которой не работает монада I (и монада O, которая может быть объединена в монаду IO)?
Редактировать : В основном я имел в виду ввод как чтение файлов, а не взаимодействие с пользователем. Это также мой вариант использования, когда я могу предположить, что входные файлы не меняются во время выполнения программы (в противном случае можно получить неопределенное поведение).