我正在尝试使用 Data.Aeson.TH DeriveJSON 为 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)
关于json - 不支持的类型 UString 使用 Aeson 和 MongoDB BSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8584497/