В чем разница между полиморфизмом ряда и структурной печати?

cs.stackexchange https://cs.stackexchange.com/questions/130159

  •  29-09-2020
  •  | 
  •  

Вопрос

Определения, которые я наткнулся, похоже, указывает, что они выражают ту же идею. Это то, что связь между типами записи определяется их полями (или свойствами), а не их именами. Кажется, их страницы Википедии также указывают на ту же идею:

a Система структурного типа (или система на основе недвижимости) является основным классом Тип системы, в которой совместимость и эквивалентность типа определяются фактической структурой или определением типа, а не другими характеристиками, такими как его имя или место декларации.

в теории типа программирования языка, рядного полиморфизма - это своего рода полиморфизм, который позволяет Написать программы, которые являются полиморфными на типов рекордов (также известных как строки, следовательно, полиморфизм ряда).

Есть ли какие-либо различия между ними?

Это было полезно?

Решение

Системы структурных типов не обязательно имеют ничего общего с записями. Например, вы можете иметь систему, где:

data Bool = False | True
data Two = Zero | One
.

на самом деле тот же тип, потому что они оба типа с двумя нутряными конструкторами. Это также не обязательно рассказывает вам много о записях, потому что даже если типы определяются их структурой, две записи:

{s : S ; t : T}
{s : S ; t : T ; u : U}
.

не одинаково структура, поэтому у вас могут быть структурные набрав, без чего бы ни было что-то удобное для этих двух типов.

Аналогичным образом

Точно так же полиморфизм ряд в изоляции не дает вам много - - только что вы можете количественно оценить рядки, и, вероятно, используют их с E.g. Тип записи параметризован ряд. Но есть все виды вариаций на то, что вы можете сделать со строками, которые действительно указывают возможности системы.

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

Так, возможно, более целевой вопрос - это то, что разница между подтипом и квантами. Ответ на то, что он, как правило, что подтипом не может выразить количественные типы, если количественная переменная не происходит только исключительно ковариантно или противоречиво. Итак, мы могли бы сказать:

(forall a. a -> T) ~= Top -> T
(forall a. T -> a) ~= T -> Bot
.

Но для типа типа forall a. a -> a, нет ни одного типа, чтобы выбрать для a без потери информации.

Это распространяется на системы с просто рекордионным полиморфизмом подразделения (подходящим) полюсным полиморфизмом. Однако, если у вас есть система с подтекстой и количественными квантами, и подтекста может применяться к количественным типам, то различия могут быть намного более тонкой. Имея как кванты, так и подтипинги, могут стать довольно сложными, хотя (не тот полиморфизм строки легко получить правильно).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top