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

import Data.Vinyl

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

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

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

我希望为包含生意经阳极缩剧和生成的记录构造一个类型的别名。天真地,这可能看起来像这样:

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

这个语法不起作用,显然是!有没有办法做到这一点?是否有任何良好的参考文献,可以解释似乎在此处使用的类型级别阵列语法?

有帮助吗?

解决方案

结果是我设法错过的非常容易的答案:

Data.Vinyl.Rec定义了缺点并为类型级别列表附加,因此以下作品:

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

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

type Other = Person ++ Address
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top