gpt4 book ai didi

haskell - 持久 key 的自定义 ToJSON 实例

转载 作者:行者123 更新时间:2023-12-04 16:45:34 25 4
gpt4 key购买 nike

我正在用 Haskell 构建一个 Web 应用程序。我正在使用持久库连接到 postgresql 数据库。

我正在使用标准模式定义文件系统,其中模板 Haskell 用于从模式生成类型。

share [mkPersist sqlSettings, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "schema")

我的架构文件中定义了许多数据类型,看起来像(假示例):
User json
email Text

Post json
owner UserId
name Text
body Text

“Post”旁边的“json”表示 ToJSON/FromJSON 将由框架自动生成。

我一直在为我的许多类型使用这种自动实例生成,以便我可以通过网络对它们进行序列化。

我的问题:我想为 key 提供 ToJSON 的自定义实例。例如,上面的“UserId”将是“关键用户”。每次都会在“PostId”作为“Key Post”等时自动为其生成这样一个实例。

当“Post”被序列化时,它会将“owner”从键转换为索引号,比如“52”。

我想将所有数据库键序列化为不同的样式。例如,不是产生数字“52”,而是产生字符串“52”(只是一个例子)。

如果我不使用代码生成,我可以做类似的事情
instance ToJSON (Key record) where
toJSON _ = Data.Aeson.String "placeholder"

但这将不需要使用自动代码生成,因为重叠实例错误。也许有一种方法可以告诉代码生成器不要为所有数据类型生成“ToJSON(Key Post)”等实例?

我也可以简单地为每种类型编写自定义实例声明,但这将是非常多余的。

我熟悉使用 newtypes 来拥有一个类型类的多个实例,但是这不太适合这种情况。

谢谢!

最佳答案

根据 haoformayor 评论中的建议,此问题现已解决。答案是forkpersistent-template库,修改mkKeyTypeDec部分。

关于haskell - 持久 key 的自定义 ToJSON 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44587846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com