【问题标题】:Proxies, type level symbols, and JSON代理、类型级符号和 JSON
【发布时间】:2014-03-16 11:33:46
【问题描述】:

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

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

【问题讨论】:

    标签: haskell types proxy vinyl


    【解决方案1】:

    您只需启用ScopedTypeVariables

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 2018-04-03
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2015-09-07
      • 2015-03-24
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多