我正在尝试将自动 json 解析添加到 Data.Vinyl
这是 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)
如果我用 替换所有实例sym
,"name"
它可以工作并运行,这很棒。现在,我可以使用模板 Haskell 提前生成所有实例,因为我有一个我将实际使用的字段名称的封闭列表,但这似乎太可惜了。我对 Data.Proxy 几乎一无所知,刚刚看到用于为 Data.Proxy 的记录定义显示实例。