2

我正在尝试将自动 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)

更多上下文http://lpaste.net/101005

如果我用 替换所有实例sym"name"它可以工作并运行,这很棒。现在,我可以使用模板 Haskell 提前生成所有实例,因为我有一个我将实际使用的字段名称的封闭列表,但这似乎太可惜了。我对 Data.Proxy 几乎一无所知,刚刚看到用于为 Data.Proxy 的记录定义显示实例。

4

1 回答 1

4

您只需启用ScopedTypeVariables.

于 2014-03-11T09:16:41.287 回答