LINUX.ORG.RU

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

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

И да, если конпелятор поставляет поддержку функции, которая, например, пишет мусор на диск, но делает то, что от нее хотят, и этот мусор в ходе работы программы никак на нее не влияет, это чистая функция?

По теории, в хаскеле все функции должны соблюдать ссылочную прозрачность (если не злоупотреблять unsafePerformIO), а потому они будут чистыми (на самом деле, есть очень редкие исключения).

Может быть, этот момент остался на совсем ясен, но та же putStrLn при вызове фактически возвращает другую функцию как свой результат. В твоем же случае функция при вызове вернет тоже другую функцию (вычисление IO), которая уже при своем вызове напишет мусор на диск, а иначе никак. Пойнт в том, что вот эту вторую возвращенную как результат функцию по хорошему (без unsafePerformIO) сам ты никак уже не можешь вызвать. Она вызывается через main.

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

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

И да, если конпелятор поставляет поддержку функции, которая, например, пишет мусор на диск, но делает то, что от нее хотят, и этот мусор в ходе работы программы никак на нее не влияет, это чистая функция?

По теории, в хаскеле все функции должны соблюдать ссылочную прозрачность (если не злоупотреблять unsafePerformIO), а потому они будут чистыми (на самом деле, есть очень редкие исключения).

Может быть, этот момент остался на совсем ясен, но та же putStrLn при вызове фактически возвращает другую функцию как свой результат. В твоем же случае функция при вызове вернет тоже другую функцию (вычисление IO), которая уже при своем вызове напишет мусор на диск, а иначе никак. Пойнт в том, что вот эту вторую возвращенную как результат функцию по хорошему (без unsafePerformIO) сам ты никак уже не можешь вызвать. Она вызывается через main.

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