json - 如何为具有依赖映射的类型派生 JSON 实例?
问题描述
我dependent-map
用来创建 GADT 值的映射。我的目标是为它们派生 JSON 实例。该aeson-gadt-th
库可以为 GADT 本身(以下P
类型)派生 JSON 实例;DMap P Identity
但是,由于缺少Generic
此类型的实例,自动推导 GADT 值(以下类型)的映射失败: • No instance for (Generic (DMap P Identity))
.
我如何Generic
为这种类型生成?
import Data.Dependent.Map
data P a where
P_Title :: P Text
deriveGEq ''P
deriveGCompare ''P
deriveJSONGADT ''P
deriving instance ToJSON (DMap P Identity)
编辑:dependent-sum-aeson-orphans
根据 Cale 的回答使用库后:
import Data.Dependent.Sum.Orphans ()
data MyType = MyType (DMap P Identity)
deriving Generic
deriving instance ToJSON MyType
我看到一个不同的错误:
• Could not deduce: Data.Constraint.Extras.ConstraintsFor'
P ToJSON Identity
如果DMap P Identity
已经有 JSON 实例(根据孤儿导入),为什么简单类型包装器没有?
编辑 2:好的,在对引用库的代码和示例进行了一些探索之后,我意识到我需要派生ArgDict
,之后一切正常!
import Data.Constraint.Extras.TH
deriveArgDict ''P
解决方案
这里有一个库,其中包含用于 DSum 和 DMap 的 ToJSON 和 FromJSON 实例。
https://github.com/obsidiansystems/dependent-sum-aeson-orphans
一定要看看它们是如何工作的,这是一个很好的例子,说明可以用constraints-extras做什么。
推荐阅读
- python - 运行 Python 文件时出现 Python args 解析问题
- c++ - C++ 上的 B-Tree 实现有内存泄漏?
- python - 如何将 python 解释器添加到 Visual Studio Code?
- python - 在 Python 中的循环内循环
- ios - 如何在 UIAlertController 中添加图像选择器
- reactjs - 如何将 react-multi-email 类转换为函数?
- java - 如何添加 whatsap 和电报 Android Webview ERR_UNKNOWN_URL_SCHEME 错误
- reactjs - 有没有办法在 React 中有 2 个 onSubmit 事件?
- python-3.x - 日期作为 Gsheet API 使用 python 导出的 xlsx 文件的文件名 nming 约定的一部分
- python - 最大化不同值的数量以避免学生作弊