自定义主键的持久性“toSqlKey”

Persistent `toSqlKey` for custom primary key

我正在定义以下模型,其中 Category 具有 Text.

类型的非整数主键 code
Category
    code Text
    Primary code
    deriving Show Typeable

CategoryTreeNode
    name Text
    code CategoryId Maybe
    lft Int MigrationOnly default=0
    rgt Int MigrationOnly default=0
    deriving Show Typeable

对于未定义 Primary 的模型,我可以使用 toSqlKey 将任意 Int64 转换为 Key Category。具有自定义主键的模型是否有等效功能?

我通过查看 persistent 的 TH 模块找到了答案:

https://github.com/yesodweb/persistent/blob/9396c278fc181fdac4a97c53637700417f41a478/persistent-template/Database/Persist/TH.hs#L857-L858

这一行表明 CategoryKey 是通过 TH 生成的,事实确实如此:

let x :: Key Category
    x = CategoryKey "foobar"