LINUX.ORG.RU

История изменений

Исправление dave, (текущая версия) :

В чистом языке println ты просто так не напишешь. Ты можешь только вернуть некое вычисление, которое потом совершит это действие.

Как я понял, такое опосредование позволяет сделать язык ссылочно-прозрачным (а значит, и чистым), что открывает путь для ленивости, разных оптимизаций при компиляции, а также различных техник программирования, которые обычно недоступны в других языках или даются большой ценой (бесконечные потоки, рекурсивные вычисления). Так что, смысл в этом определенно есть.

Я воспринимаю вычисление IO как некую функцию, которая в рамках промежуточного языка более низкого уровня, чем хаскель, вполне может совершать грязные хаки при вызове, но это только мое личное видение.

На самом деле, тема довольно сложная.

P.S. Теперь, чтобы совсем запутать :) Фактически, вычисление IO очень похоже на монаду State, только здесь передается некоторое условное состояние мира по цепочке вычислений - поэтому простой do позволяет описывать императивную последовательность действий, но это происходит в силу свойств композиции функций (и это задуманное совпадение), а не в силу каких-то особых свойства монад (как думают многие). Вычисление IO вполне может быть непоследовательным и неупорядоченным при использовании mdo, например, как и существуют монады, для которых вычисление даже в рамках do может совершаться с конца в начало, что совершенно неестественно для неленивых языков.

Исходная версия dave, :

В чистом языке println ты просто так не напишешь. Ты можешь только вернуть некое вычисление, которое потом совершит это действие.

Как я понял, такое опосредование позволяет сделать язык ссылочно-прозрачным (а значит, и чистым), что открывает путь для ленивости, разных оптимизаций при компиляции, а также различных техник программирования, которые обычно недоступны в других языках или даются большой ценой (бесконечные потоки, рекурсивные вычисления). Так что, смысл в этом определенно есть.

Я воспринимаю вычисление IO как некую функцию, которая в рамках промежуточного языка более низкого уровня, чем хаскель, вполне может совершать грязные хаки при вызове, но это только мое личное видение.

На самом деле, тема довольно сложная.

P.S. Теперь, чтобы совсем запутать :) Фактически, вычисление IO очень похоже на монаду State, только здесь передается некоторое условное состояние мира по цепочке вычислений - поэтому простой do позволяет описывать императивную последовательность действий, но это происходит в силу свойств композиции функций (и это задуманное совпадение), а не в силу каких-то особых свойства монад (как думают многие). Вычисление IO вполне может быть непоследовательным и неупорядоченным при использовании mdo, например.