持久库中的类型族

Posted

技术标签:

【中文标题】持久库中的类型族【英文标题】:Type families in Persistent library 【发布时间】:2017-01-25 12:56:32 【问题描述】:

在关于 Persistent 的章节中解释模板扩展时,Yesod 的书看起来像

newtype Key Person = PersonKey (BackendKey SqlBackend)

我不太清楚如何阅读这个新类型声明:是 PersonKey a 已经在其他地方定义的东西(不能 找到它的定义)还是PersonKey只是一个普通的 类型或值构造函数,如Just/Nothing/Left/等。 ?

【问题讨论】:

【参考方案1】:

好吧,先简单一点,我们假设它说:

newtype KeyPerson = PersonKey (BackendKey SqlBackend)

在这种情况下,KeyPerson 将是“类型构造函数”,PersonKey 将是“数据构造函数”。我们将在这里创建它们。 PersonKey 数据构造函数将保存 BackendKey SqlBackend 类型的值,该值需要存在于其他地方并从此处引用。

在这种情况下,我们通常是关联类型(也称为类型族),这使事情稍微变得更加复杂:newtype Key Person 的意思是“我们正在为 @ 定义一个关联的 Key 987654328@ 类型。但我们仍然像以前一样创建PersonKey 数据构造函数。

【讨论】:

从 Michael Snoyman 经他许可发送的电子邮件中复制的答案

以上是关于持久库中的类型族的主要内容,如果未能解决你的问题,请参考以下文章

如何在房间持久性库中使用外键

从 Cassandra 列族中的冻结集列中获取不同的字段值

如何在房间持久性库中插入图像?

ParseDb GAS 库中的解析核心指针类型关系

PhpStorm 错误?错误的返回类型:预期用户,返回 Laravel 存储库中的 Eloquest\Model|object

使用大量 IDL 接口管理 COM 类型库中的定义