持久库中的类型族
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 经他许可发送的电子邮件中复制的答案以上是关于持久库中的类型族的主要内容,如果未能解决你的问题,请参考以下文章
PhpStorm 错误?错误的返回类型:预期用户,返回 Laravel 存储库中的 Eloquest\Model|object