Да, это в некотором смысле это правда.
Система типа сама по себе ничего не знает о IO
и не нуждается в ней. Это разные языковые функции, которые скрывают реальное представление действия IO от пользователей, так что невозможно «просто запустить» действие ввода-вывода.
Так, правда, что безопасность IO в Haskell и сравнимых языках представляет собой комбинированный результат нескольких языковых особенностей и свойств, наиболее заметно:
- сильный тип системы, которая не принимает «закрыть я знаю лучше »от пользователя.
- свойство, что все набрано. Я имею в виду, что на нечистых языках у вас есть «заявления», и даже если система типов сильная, она не просматривается после следующей точки с запятой. В то время как в Haskell у нас есть только выражения, и каждый бит каждого выражения получает тип и, в конце концов, влияет на тип функции, в которой происходит выражение.
- Языковые функции, которые скрывают представление типа.
Тем не менее, я считаю, что выражение «система типов гарантирует, что нечистый и чистый код разделяется» является безвредным упрощением.
Функции в https://hackage.haskell.org/package/base-4.8.2.0/docs/System-IO-Unsafe.html по существу делают то, что вы описываете, - это очень обескураживает по очевидным причинам –
@KevinW , О да, дух :) Большое спасибо. – BalinKingOfMoria