4

我知道Data.Text存储字符串数据的方式比String = [Char]. 但是,我在库中看到的许多函数似乎都希望String传递给它们。Char考虑到指针会比字符串本身占用更多空间,因此 s的链表读取效率似乎非常低。除了列表融合(这可能并不总是可能的),GHC 是否对[Char]'s 的存储进行了任何优化,它是否将类似的原则应用于其他列表?

4

3 回答 3

5

所有基础库函数都使用String而不是更高效的类型的原因是所需的文本Text不是基础库的一部分。然而,文本库提供了它自己的各种输入/输出函数的变体。您可以在 中找到它们Data.Text.IO

另请注意,对于高效的 I/O,您通常会使用现代抽象之一,如管道、迭代器或管道。

于 2012-07-31T04:28:12.950 回答
2

在 GHC 下,在平均情况下,每个代码点String使用5 个字。但是,运行时预先分配 ASCII 范围内的字符这一事实减轻了这种情况。

于 2012-07-31T04:03:35.297 回答
-1

是答案。

Bytestring有点像列表,只有每个元素的大小是一个字节(或 8 位)。他们处理懒惰的方式也不同。

于 2012-07-31T09:18:06.817 回答