История изменений
Исправление 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()) будет корректна.