Да, A{}
соответствует любому значению, созданному с помощью конструктора A
, независимо от того, был ли тип объявлен с синтаксисом записи или нет.
В языковом отчете указано
Выражение F {}, где F - конструктор данных, допустимо независимо от того, было ли объявлено F с синтаксисом записи (при условии, что F не имеет строгих полей - см. Четвертый пункт выше); оно обозначает F ⊥1… ⊥n, где n - арность F.
«Четвертый маркер», упомянутый в скобках, утверждает, что создание значения с синтаксисом записи, в котором отсутствует строгое поле, является статической ошибкой.
А в разделе сопоставление с образцом одно из грамматических правил для шаблонов -
apat -> qcon { fpat1 , … , fpatk } (labeled pattern, k ≥ 0)
и семантика приведена в подразделе о формальной семантике сопоставления с образцом (3.17.3) как
(o) case v of { K {} -> e ; _ -> e′ }
= case v of {
K _… _ -> e ; _ -> e′ }