Прокси, символы уровня типа и JSON
Я пытаюсь добавить автоматический анализ 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, только что видел в используется для определения экземпляра show для записей Data.Proxy.
1 ответ
Решение