yourself type learn how define haskell syntax record

learn - type definition haskell



¿Qué es esta sintaxis haskell? (1)

Acabo de encontrar la siguiente sintaxis en un fragmento de código de Haskell:

data A = A Int Int | B m :: A -> Int m a = case a of A{} -> 1 _ -> 2

¿Qué está haciendo la A{} aquí? ¿La {} coincide automáticamente con cualquier número de argumentos?

Tengo la sensación de que esto está explotando el hecho de que Haskell registra las sinasis de sintaxis en un montón de funciones y un tipo de datos algebraico regular. ¿Es ese el caso?


Sí, A{} coincide con cualquier valor construido con el constructor A , independientemente de si el tipo se ha declarado con o sintaxis de registro.

El informe de idioma especifica

La expresión F {}, donde F es un constructor de datos, es legal si F fue declarada o no con sintaxis de registro (siempre que F no tenga campos estrictos; consulte la cuarta viñeta arriba); denota F ⊥1 ... ⊥n, donde n es la aridad de F.

La ''cuarta viñeta'' mencionada en el paréntesis indica que es un error estático construir un valor con sintaxis de registro que omita un campo estricto.

Y en la sección sobre coincidencia de patrones , una de las reglas gramaticales para patrones es

apat -> qcon { fpat1 , … , fpatk } (labeled pattern, k ≥ 0)

y la semántica se da en la subsección sobre semántica formal de emparejamiento de patrones (3.17.3) como

(o) case v of { K {} -> e ; _ -> e′ } = case v of { K _… _ -> e ; _ -> e′ }