自動 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 についてほとんど何も知りません。