История изменений
Исправление wandrien, (текущая версия) :
Вот есть юнит тайп (у тебя nulltype), отлично подходит для описания процедур void f(…)
Если брать аспект того, сообщает ли нам функция какую-то run-time информацию, то nulltype и void одинаково говорят нам, что не сообщает. То есть в обоих случаях имеет место вырожденная область значений.
Но набор допустимых операций - разный.
Основное назначение nulltype - это обозначение пустоты в ситуации работы с указателями. Тип указателя это дизъюнкция а ля
NullablePointer(T) = Pointer(T) | nulltype
. Поэтому если у нас есть указатель x
и функция nulltype f()
, то запись x = f();
будет корректна.
А в случае с void
функциями это не то, что мы хотим получить.
Далее, также возможна и функция с сигнатурой void g(nulltype)
.
И в таком случае запись g(f())
будет корректна.
Исходная версия wandrien, :
Вот есть юнит тайп (у тебя nulltype), отлично подходит для описания процедур void f(…)
Если брать аспект того, сообщает ли нам функция какую-то run-time информацию, то nulltype и void одинаково говорят нам, что не сообщает. То есть в обоих случаях имеет место вырожденная область значений.
Но набор допустимых операций - разный.
Основное назначение nulltype - это обозначение пустоты в ситуации работы с указателями. Тип указателя это дизъюнкция а ля
NullablePointer = Pointer(T) | nulltype
. Поэтому если у нас есть указатель x
и функция nulltype f()
, то запись x = f();
будет корректна.
А в случае с void
функциями это не то, что мы хотим получить.
Далее, также возможна и функция с сигнатурой void g(nulltype)
.
И в таком случае запись g(f())
будет корректна.