Ваш взгляд на IO
хорош, но у меня проблема с этой строкой
Вызывает main, чтобы вернуть "вычисление ввода-вывода"
Лучший способ думать о Haskell - это то, что функции ничего не делают . Скорее, вы декларативно опишите, какие значения являются . Программа состоит из описания значения IO
, называемого main
. Единственный смысл, который он «называет основным», состоит в том, что объявление main
сводится к нормальной форме слабой головы (или что-то подобное).
IO
- это тип произвольных вычислений с полным побочным эффектом. Чистое подмножество Haskell - это чисто декларативное описание значений, которое допускает неразрешимые описания. Думайте о Хаскеле как о математическом языке, подобном теории множеств. Утверждения в теории множеств ничего не делают делают , но они могут включать сложные вычисления, такие как "наименьшее множество, которое содержит Akerman's_function (30)". Они также могут содержать неразрешимые операторы, такие как «S = набор всех наборов, которые не содержат себя» *
@ amindfv наполовину прав: main
не является «чистой функцией». Это не функция вообще. Это значение, определяемое чистым сокращением, кодирующее неочищенные вычисления.