因此,我正在使用 aeson 将一些 JSON 解析为自定义数据类型,但我似乎无法理解为什么 Haskell 需要在库中具有某些类型的两种表示形式。就我而言,这都与文本有关。
例如:
Couldn't match expected type `Data.ByteString.Internal.ByteString'
with actual type `B.ByteString'.
嗯,什么?这两个怎么不一样?为什么会有Data.ByteString.ByteString
和Data.ByteString.Internal.ByteString
?我不明白为什么这两者是两种不同的类型以及为什么我需要在它们之间进行转换。
是否有介绍 ByteString 用法的指南?我知道如果您只处理 ASCII,它们比 String
更有效。
最佳答案
Data.ByteString.ByteString
只是 Data.ByteString.Internal.ByteString
的再导出,所以类型是相同的。然而,严格字节串和惰性字节串是不同的类型,因此我怀疑您遇到的问题是由 B.ByteString
实际上是 Data.ByteString.Lazy.ByteString
引起的。
如果这没有帮助,请提供更多上下文。
Bytestring确实是存储ASCII最高效的类型。这是 a tutorial on bytestring . String
对于大多数用例来说效率很低,Text
是 unicode 的首选替代方案。
关于haskell - Haskell 中的内部数据结构(文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223326/