如何为具有依赖映射的类型派生JSON实例?
我使用创建GADT值的映射。我的目标是为它们派生JSON实例。库可以为GADT本身派生JSON实例(下面的如何为具有依赖映射的类型派生JSON实例?,json,haskell,gadt,Json,Haskell,Gadt,我使用创建GADT值的映射。我的目标是为它们派生JSON实例。库可以为GADT本身派生JSON实例(下面的P类型);但是,由于缺少此类型上的Generic实例,•没有(Generic(DMap P Identity))的实例,因此自动派生GADT值的映射(下面的DMap P Identity类型)失败 如何生成此类型的通用 import Data.Dependent.Map data P a where P_Title :: P Text deriveGEq ''P deriveGCom
P
类型);但是,由于缺少此类型上的Generic
实例,•没有(Generic(DMap P Identity))的实例,因此自动派生GADT值的映射(下面的DMap P Identity
类型)失败
如何生成此类型的通用
import Data.Dependent.Map
data P a where
P_Title :: P Text
deriveGEq ''P
deriveGCompare ''P
deriveJSONGADT ''P
deriving instance ToJSON (DMap P Identity)
编辑:在使用下面的依附和aeson孤儿
库后:
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实例
一定要看看它们是如何工作的,这是一个很好的例子,说明了如何使用它们