типа Полнота Принцип:
Никакие операции не должны быть произвольно ограничены в типах значений участвующих. - значения первого класса Watt
можно оценить, передаются в качестве аргументов и используются в качестве компонентов композиционных значений. Функциональные языки не выполняют никаких различий в классе, , тогда как императивные языки обычно обрабатывают функции (в лучших) как значения второго класса.
Практически все языки программирования ограничивают типы объектов , которые могут передаваться как значения (и, следовательно, имеют осмысленный тип ). В C или C++ функции не являются значениями, хотя указатели на функции . Классы не являются значениями.
В Java методы и классы не являются значениями, хотя вы можете получить объект-объект, представляющий класс как значение, а в Java 8 вы можете передавать ссылки методов как значения. Однако пакеты не являются значениями .
В Haskell функции являются первоклассными значениями, поэтому могут передаваться как аргументы и возвращаться как значения. Поскольку Haskell статически типизирован, система способна выражать типы функций.
может представлять интерес: https://www.researchgate.net/publication/240319683_Type-completeness_as_a_language_principle – Julien