2

自動 json 解析を Data.Vinyl に追加しようとしています

以下は、要素が 1 つだけのレコードの 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 のレコードの show インスタンスを定義するために使用されているのを見たばかりなので、Data.Proxy についてほとんど何も知りません。

4

1 に答える 1

4

有効にするだけScopedTypeVariablesです。

于 2014-03-11T09:16:41.287 に答える