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í?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top