json – 使用Aeson和MongoDB BSON的不支持的类型UString

我试图使用Data.Aeson.TH derive
JSON为MongoDB Data.Bson生成ToJSON和FromJSON实例.

目前我正在使用:

$(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.我需要转换或以其他方式将BSON数据中预期的UString映射到另一个String类型……但是难以理解.

最佳答案 正如我所提到的,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)
点赞