Винил: создайте псевдонимы типа записи

В виниле я могу определить псевдоним типа для записи, чтобы упростить экспорт в другие модули:

import Data.Vinyl

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

Теперь предположим, что я добавил еще одно поле для хранения высоты.

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

Я хотел бы красиво создать псевдоним типа для записи, содержащей Person а также height, Наивно, это может выглядеть примерно так:

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

Этот синтаксис не работает, очевидно! Есть ли способ сделать это? Есть ли хорошие ссылки, которые объясняют синтаксис массива уровня типа, который, кажется, используется здесь?

1 ответ

Решение

Оказывается, есть очень простой ответ на этот вопрос, который мне удалось пропустить:

Data.Vinyl.Rec определяет и минусы, и добавление для списков уровня типа, поэтому работает следующее:

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

Если бы у меня было два списка, я мог бы добавить их следующим образом:

type Other = Person ++ Address
Другие вопросы по тегам