Vinilo:componer alias de tipo de registro
-
21-12-2019 - |
Pregunta
En Vinyl, puedo definir un alias de tipo para un registro para facilitar su exportación a otros módulos:
import Data.Vinyl
name = Field :: "name" ::: String
age = Field :: "age" ::: Int
type Person = ["name" ::: String, "age" ::: Int]
Ahora supongamos que agrego otro campo que almacena la altura.
height = Field :: "height" ::: Int
Me gustaría construir muy bien un alias de tipo para el registro que contiene un Person
y height
.Ingenuamente, eso podría verse así:
type MeasuredPerson = ("height" ::: Int) : Person
¡Esta sintaxis no funciona, obviamente!¿Hay alguna forma de hacer esto?¿Existe alguna buena referencia que explique la sintaxis de matriz de nivel de tipo que parece estar en uso aquí?
Solución
Resulta que hay una respuesta muy fácil a esto, lo que me las arreglé para perderse:
Data.Vinyl.Rec
Define ambos contras y agrega las listas de niveles de tipo, por lo que las siguientes obras:
type MeasuredPerson = ("height" ::: Int) ': Person
Si tuviera dos listas, podría agregarlas de la siguiente manera:
type Other = Person ++ Address