Почему в Haskell нет монады I (только для ввода, в отличие от монады IO)?

Концептуально кажется, что вычисление, которое выполняет вывод, сильно отличается от вычисления, которое выполняет только ввод. Последнее, в определенном смысле, намного чище.

Я, например, хотел бы иметь способ отделить части моей программы, предназначенные только для ввода, от тех, которые могут действительно что-то записывать.

Итак, почему нет ли только монады ввода?

Есть ли причина, по которой не работает монада I (и монада O, которая может быть объединена в монаду IO)?

Редактировать : В основном я имел в виду ввод как чтение файлов, а не взаимодействие с пользователем. Это также мой вариант использования, когда я могу предположить, что входные файлы не меняются во время выполнения программы (в противном случае можно получить неопределенное поведение).

22
задан Don Stewart 24 April 2011 в 16:28
поделиться