Опишите вывод типа Damas-Milner способом, который может понять студент CS101

Нет строго никакого различия, таким образом, это - главным образом вопрос вкуса и того, что находится в строке (или если сам код JS находится в строке), для поддержания количества на низком уровне Escape.

легенда разности оборотов могла бы прибыть из мира PHP, где две кавычки имеют различное поведение.

11
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

Damas Milner - это просто структурированное использование унификации.

Когда оно рекурсивно превращается в лямбда-выражение, оно составляет новое имя переменной. Когда вы в подтерме обнаруживаете, что переменная используется таким образом, который требует определенного типа, он записывает объединение этой переменной и этого типа. Если он когда-либо пытается объединить два типа, которые не имеют смысла, например, говоря, что отдельная переменная является одновременно Int и функцией от a -> b, то он кричит на вас за то, что вы делаете что-то плохое.

Кроме того, это Часто говорят, что алгоритм выполняет вывод типов. Это действительно система вывода? Я думал, что это всего лишь вывод типов.

Вывод типов - это вывод типов. Проверка допустимости аннотаций типов для данного термина - это проверка типа. Это разные проблемы.

Если так, то это означает, что интересной частью является сама система типов, а не система вывода типов.

Обычно говорят, что системы типов в стиле Хиндли-Милнера сбалансированы на острие. Если вы добавите гораздо больше функциональных возможностей, невозможно будет определить типы. Таким образом, расширения системы типов, которые можно накладывать поверх системы типов стиля Хиндли-Милнера, не нарушая ее свойств вывода, действительно являются интересными частями современных функциональных языков. В некоторых случаях мы смешиваем вывод типов и проверку типов, например, в Haskell многие современные расширения не могут быть выведены, но могут быть проверены, поэтому они требуют аннотаций типов для расширенных функций, таких как полиморфная рекурсия.

Если вы добавите намного больше функциональных возможностей, становится невозможно определить типы. Таким образом, расширения системы типов, которые можно накладывать поверх системы типов стиля Хиндли-Милнера, не нарушая ее свойств вывода, действительно являются интересными частями современных функциональных языков. В некоторых случаях мы смешиваем вывод типов и проверку типов, например, в Haskell многие современные расширения не могут быть выведены, но могут быть проверены, поэтому они требуют аннотаций типов для расширенных функций, таких как полиморфная рекурсия.

Если вы добавите намного больше функциональных возможностей, становится невозможно определить типы. Таким образом, расширения системы типов, которые можно накладывать поверх системы типов стиля Хиндли-Милнера, не нарушая ее свойств вывода, действительно являются интересными частями современных функциональных языков. В некоторых случаях мы смешиваем вывод типов и проверку типов, например, в Haskell многие современные расширения не могут быть выведены, но могут быть проверены, поэтому они требуют аннотаций типов для расширенных функций, таких как полиморфная рекурсия.

11
ответ дан 3 December 2019 в 09:20
поделиться

Википедия дает описание алгоритма, которое, насколько я могу судить, сводится к одному слову: "унификация". Это все, что в нем есть? Если да, то это означает, что интересна сама система типов, а не система вывода типов.

IIRC, интересная часть алгоритма W вывода типов Дамаса-Милнера заключается в том, что он выводит наиболее общие типы из возможных.

1
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: