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