Ответ 1
Да, 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′ }