我知道Data.Text
比String = [Char]
更有效地存储字符串数据。但是,我在库中看到的许多函数似乎都希望传递给它们String
。 Char
的链接列表似乎效率很低,因为指针会占用比字符串本身更多的空间。除了列表融合(可能并不总是可能)之外,GHC对[Char]
的存储有什么优化,它是否将类似的原则应用于其他列表?
答案 0 :(得分:5)
所有基本库函数使用String
而不是更高效类型的原因是Text
所需的 text 库不是基本库的一部分。但是,文本库提供了各种输入/输出功能的变体。您可以在Data.Text.IO
中找到它们。
另请注意,对于高效的I / O,您通常会使用其中一个现代抽象,例如管道,迭代或管道。
答案 1 :(得分:2)
在GHC下,String
在平均情况下使用5 words per code point。但是,运行时预分配ASCII范围内的字符可以减轻这种情况。
答案 2 :(得分:-1)
Here就是答案。
Bytestring 类似于列表,只有每个元素的大小为一个字节(或8位)。他们处理懒惰的方式也不同。