乙烯基:组成记录类别别名

Imp*_*ive 9 haskell type-level-computation vinyl

在Vinyl中,我可以为记录定义类型别名,以便更容易导出到其他模块:

import Data.Vinyl

name = Field :: "name" ::: String
age = Field :: "age" ::: Int
type Person = ["name" ::: String, "age" ::: Int]
Run Code Online (Sandbox Code Playgroud)

现在假设我添加另一个存储高度的字段.

height = Field :: "height" ::: Int
Run Code Online (Sandbox Code Playgroud)

我想很好地为包含Person和的记录构造一个类型别名height.天真,这可能看起来像这样:

type MeasuredPerson = ("height" ::: Int) : Person
Run Code Online (Sandbox Code Playgroud)

显然,这种语法不起作用!有没有办法做到这一点?是否有任何好的参考资料来解释这里似乎使用的类型级数组语法?

Imp*_*ive 10

事实证明这是一个非常简单的答案,我设法错过了:

Data.Vinyl.Rec 为类型级别列表定义cons和append,因此以下工作:

type MeasuredPerson = ("height" ::: Int) ': Person
Run Code Online (Sandbox Code Playgroud)

如果我有两个列表,我可以按如下方式添加它们:

type Other = Person ++ Address
Run Code Online (Sandbox Code Playgroud)