Frage

In Vinyl kann ich einen Typalias für einen Datensatz definieren, um den Export in andere Module zu erleichtern:

import Data.Vinyl

name = Field :: "name" ::: String
age = Field :: "age" ::: Int
type Person = ["name" ::: String, "age" ::: Int]

Angenommen, ich füge ein weiteres Feld hinzu, in dem die Höhe gespeichert wird.

height = Field :: "height" ::: Int

Ich möchte einen schönen Typalias für den Datensatz erstellen, der a enthält Person Und height.Naiverweise könnte das etwa so aussehen:

type MeasuredPerson = ("height" ::: Int) : Person

Diese Syntax funktioniert offensichtlich nicht!Gibt es eine Möglichkeit, dies zu tun?Gibt es gute Referenzen, die die Array-Syntax auf Typebene erklären, die hier offenbar verwendet wird?

War es hilfreich?

Lösung

Es stellt sich heraus, dass es darauf eine sehr einfache Antwort gibt, die ich übersehen habe:

Data.Vinyl.Rec definiert sowohl „cons“ als auch „append“ für Listen auf Typebene, sodass Folgendes funktioniert:

type MeasuredPerson = ("height" ::: Int) ': Person

Wenn ich zwei Listen hätte, könnte ich sie wie folgt anhängen:

type Other = Person ++ Address
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top