Sì, A{}
corrisponde a qualsiasi valore costruito con il costruttore A
, indipendentemente dal fatto che il tipo sia stato dichiarato con sintassi di registrazione o meno.
Il language report specifica
L'espressione F {}, dove F è un costruttore di dati, è legale o meno F è stata dichiarata con la sintassi di record (a condizione F non ha campi severe - vedi il quarto proiettile sopra); denota F ⊥1 ... ⊥n, dove n è l'arietà di F.
Il 'quarto proiettile' di cui la parentesi afferma che si tratta di un errore statico per costruire un valore con la sintassi di registrazione che omette un rigoroso campo.
E nella sezione relativa pattern matching, una delle regole grammaticali per modelli è
apat -> qcon { fpat1 , … , fpatk } (labeled pattern, k ≥ 0)
e la semantica sono riportati nella sottosezione sulla semantica formale di pattern-matching (3.17.3) come
(o) case v of { K {} -> e ; _ -> e′ }
= case v of {
K _… _ -> e ; _ -> e′ }
fonte
2012-01-18 04:34:19
imparare qualcosa di nuovo ogni giorno, e sono stato di programmazione Haskell per 5 anni; mai visto la sintassi nella mia vita. –