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