В книге Уллмана по 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;
, должны ли шаблоны в выражении соответствия иметь такой же тип? (Думаю, да, потому что параметры функции имеют типы, и мы не можем давать аргументы разных типов одному и тому же параметру.)
Спасибо.