Я пытаюсь переименовать ключи при сериализации объекта в json.
Я понимаю, что способ сделать это состоит в том, чтобы вместо того, чтобы просто использовать обобщение, определить экземпляр с именами пользовательских ключей, например так:
-- instance ToJSON R2 -- old
instance ToJSON R2 where
toJSON (R2 recCode recDate) = object [ "code" .= recCode , "date" .= recDate ]
-- new
Однако это дает мне:
<interactive>:2:70: error:
Ambiguous occurrence ‘.=’
It could refer to either ‘Data.Aeson..=’, imported from ‘Data.Aeson’ (and originally defined in ‘aeson-1.3.1.1:Data.Aeson.Types.ToJSON’)
or ‘Control.Lens..=’, imported from ‘Control.Lens’ (and originally defined in ‘Control.Lens.Setter’)
Моя попытка исправить это состояла в том, чтобы явно форсировать значение оператора .=
, определив его в моем коде, например:
(.=) = Data.Aeson.(.=)
Это было предположение, но, похоже, неправильный синтаксис.Я добавил парены по аналогии со следующими ресурсами:
Это дало мне эту ошибку:
(.=) = Data.Aeson (.=)
<interactive>:1:8: error:
Not in scope: data constructor ‘Data.Aeson’
No module named ‘Data’ is imported.
Какой правильный синтаксис говорит: «Пусть .=
однозначно будет .=
из Data.Aeson
»?