我有一个使用大量字符串的 Haskell 代码,在对其进行分析时,该代码似乎使用了大量内存来存储列表 []。这个问题的一种解决方案是使用 Data.ByteString.Lazy 而不是 String,但是
这样做时我需要关心什么?,
代码的哪一部分必须仔细查看:折叠、映射、...?
谢谢您的回复
最佳答案
OverloadedStrings如果您使用 GHC 并且正在转换包含大量字符串文字的代码,则扩展可能会很方便。只需将以下内容添加到源文件的顶部:
{-# LANGUAGE OverloadedStrings #-}
而且您不必使用
B.pack
在代码中的任何字符串文字上。例如,您可以拥有以下内容:equalsTest :: B.ByteString -> Bool
equalsTest x = x == "Test"
如果没有扩展名,这会导致错误,因为您不能使用
==
在 ByteString
和一个 [Char]
.通过扩展,字符串文字的类型为 (IsString a) => a
, 和 ByteString
是 IsString
的一个实例,所以 "Test"
这里输入为 ByteString
并且没有错误。
关于memory-management - 如何在现有的 Haskell 代码中从 String 转到 Data.ByteString.Lazy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3715247/