Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为具有依赖映射的类型派生JSON实例?_Json_Haskell_Gadt - Fatal编程技术网

如何为具有依赖映射的类型派生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

我使用创建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
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实例

一定要看看它们是如何工作的,这是一个很好的例子,说明了如何使用它们