Неподдерживаемый тип UString с использованием Aeson с MongoDB BSON - PullRequest
4 голосов
/ 21 декабря 2011

Я пытаюсь использовать Data.Aeson.TH DerveJSON для генерации экземпляров ToJSON и FromJSON для MongoDB Data.Bson.

В настоящее время я использую:

$(deriveJSON id ''Data.Bson.Field)
$(deriveJSON id ''Data.Bson.Value)
$(deriveJSON id ''Data.Bson.Binary)
$(deriveJSON id ''Data.Bson.UUID)
$(deriveJSON id ''Data.Bson.UserDefined)
$(deriveJSON id ''Data.Bson.Regex)
$(deriveJSON id ''Data.Bson.Symbol)
$(deriveJSON id ''Data.Bson.MinMaxKey)
$(deriveJSON id ''Data.Bson.MongoStamp)
$(deriveJSON id ''Data.Bson.Javascript)
$(deriveJSON id ''Data.Bson.ObjectId)
$(deriveJSON id ''Data.Bson.MD5)
$(deriveJSON id ''Data.Bson.Function)
$(deriveJSON id ''Data.Bson.UString)

Какиегенерирует следующую ошибку во время компиляции:

Exception when trying to run compile-time code:
Data.Aeson.TH.withType: Unsupported type: TySynD Data.UString.UString [] (ConT Data.CompactString.UTF8.CompactString)
Code: deriveJSON (id) 'UString

Я думаю, что проблема здесь в том, что строка внутри документа BSON является Ustring.Мне нужно преобразовать или каким-либо иным образом отобразить ожидаемую строку UST в данных BSON для другого типа String ... но я не знаю, как это сделать.

1 Ответ

2 голосов
/ 22 декабря 2011

Как я уже говорил, Aeson не поддерживает синонимы типов, но ничто не мешает нам развернуть UString.

type UString = Data.CompactString.CompactString
type CompactString = Data.CompactString.Internal.CompactString UTF8

Итак, этот (вместо производного для UString) будет работать:

$(deriveJSON id ''Data.CompactString.Internal.CompactString)
$(deriveJSON id ''Data.CompactString.Encodings.UTF8)
...