通过Haskell的本机字符串函数导入Data.Text有什么好处?
ghci$> drop 3 "abcdefg"
> "defg"
ghci$> import qualified Data.Text as T
> T.drop 3 $ T.pack "abcdefg"
> "defg"
等。 Data.Text提供的许多其他方法(如果不是全部)由标准库提供。另外,要使用带有Data.Text的字符串,我必须将字符串打包/解压缩为Text。我为什么要使用Data.Text?
答案 0 :(得分:4)
Data.Text
更节省空间。 Haskell的本地String
相当于Char
的链接列表,这意味着即使是中等大小的文本块,它也有很高的空间开销。
Data.Text
通常比String
更高效。因为String
是一个链表,而Text
是一个内存数组(或者懒惰变体中的几个内存数组),它提供了更好的内存局部性。 Text
通常可以比String
更高效地与本机系统库(例如IO)连接,后者需要通过中间缓冲区。对于执行大量IO(读/写文件)的程序,加速可以是一个数量级或更多。
最后,Data.Text
提供了一些特定于文本的功能,这些功能在本地String
中不易提供。例如,各种case-folding和substring相关的函数。虽然可以提供适用于String
的变体,但由于Text
版本随时可用,因此没有动力这样做。