Может ли механизм вывода типов обнаруживать ошибки типов?

Я разрабатываю интерпретатор функционального языка программирования, который использует систему типов Хиндли-Милнера.

Вопрос в том, где должны возникать (обнаруживаться) ошибки типов?

Например, если я применяю значение типа Integer к функции типа Bool -> Integer, это, очевидно, ошибка типа. Всегда ли это может обнаружить вывод типа?

Я предполагаю, что средство вывода типа не всегда полностью знает типы выражений, т.е. в процессе вывода. Следовательно, некоторые ошибки, обнаруженные средством вывода типа, будут ошибочными, а некоторые ошибки не будут обнаружены.

Однако оценщик выражений должен правильно обнаруживать ошибки типов, потому что оценщик полностью знает типы выражений.

Если механизм вывода типов не может правильно обнаруживать ошибки типов, то как статически типизированные интерпретируемые языки, такие как OCaml, обрабатывают проверку ошибок статического типа?


person suhdonghwi    schedule 16.03.2018    source источник
comment
Типы — это свойства синтаксической структуры кода. Они не существуют во время выполнения, поэтому я не уверен, почему вы думаете, что оценщик может обнаруживать ошибки типов (или почему вы думаете, что средство проверки типов не может).   -  person melpomene    schedule 16.03.2018
comment
@melpomene Ты прав. Я определенно путаю концепцию типа. Большое спасибо.   -  person suhdonghwi    schedule 17.03.2018


Ответы (1)


... ошибка типа. Всегда ли это может обнаружить вывод типа?

Если ваш вывод типа правильный, то да, он всегда должен обнаруживать ошибку.

В частности, в системе типов Хиндли-Милнера алгоритм основан на унификации, чтобы найти основной тип. В случае, если их нет, вы получите ошибку объединения.

person Leandro T. C. Melo    schedule 06.05.2018