Должны ли шаблоны в выражении соответствия SML иметь одинаковый тип? - PullRequest
0 голосов
/ 30 апреля 2020

В книге Уллмана по SML:

Выражение соответствия состоит из одного или нескольких правил, которые представляют собой пары вида

<pattern> => <expression>

Правила разделены вертикальными чертами, поэтому форма совпадения:

<pattern 1> => <expression 1> |
<pattern 2> => <expression 2> |
<pattern n> => <expression n>

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

Являются ли шаблоны в выражениях выражения совпадения (поэтому они имеют типы)?

Должны ли шаблоны в выражении соответствия также иметь одинаковый тип?

В частности, когда выражение соответствия используется для определения функции, например

val rec f = fn P1 => E1 | P2 => E2 | ... | Pn => En;

, должны ли шаблоны в выражении соответствия иметь такой же тип? (Думаю, да, потому что параметры функции имеют типы, и мы не можем давать аргументы разных типов одному и тому же параметру.)

Спасибо.

1 Ответ

1 голос
/ 30 апреля 2020

Да, как и выражения, шаблоны имеют типы. И типы различных шаблонов в совпадении должны быть одинаковыми.

В этом случае тип шаблона также должен совпадать с типом выражения проверки. Для функций тип шаблона - это тип параметра функции.

...