我正在尝试向 Data.Vinyl 添加自动 json 解析
这是一个 FromJSON 实例,用于仅包含一个元素的记录。
它几乎可以工作,但我无法满足 KnownSymbol 约束,它似乎会在我身上自动生成一个新的类型变量。
instance (KnownSymbol sym, FromJSON a) => FromJSON (PlainRec '[ sym ::: a ]) where
parseJSON (Object v) = (field =:) <$> (v .: json_name)
where field = Field :: (sym ::: a)
json_name = T.pack $ show field
错误是
Could not deduce (KnownSymbol sym0) arising from a use of ‛show’
from the context (KnownSymbol sym, FromJSON a)
如果我用 "name"
替换 sym
的所有实例,它就可以工作,并且可以运行,而且非常棒。现在,我可以使用模板 Haskell 提前生成所有实例,因为我有一个实际使用的字段名称的封闭列表,但这似乎很遗憾。我对 Data.Proxy 几乎一无所知,刚刚看到用于定义 Data.Proxy 记录的显示实例。
最佳答案
您只需启用ScopedTypeVariables
。
关于haskell - 代理、类型级别符号和 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22319457/