需要一种有效的方法将(Seq Data.Text)转换为Data.Text

时间:2013-06-14 18:53:05

标签: haskell

我有一个程序(一个使用Text.XML.Expat.SAX的SAX解析器),它使用Data.Text内容的重复附加来构建非常大的CDATA节点,使用Data.Sequence.(|>),如下所示:

existingText |> newTextChunk

这会构建一个非常大的Seq Text类型的数据。

在我构建数据后,我需要转换Seq Text -> Text。但我试过的这个解决方案超级慢:

Data.Foldable.foldr1 Data.Text.append seqText

是否有更快的方法将文本序列转换为纯文本数据?

另一种问题的方法可能是,将文本列表合并为一个文本的最有效方法是什么,即[Text] -> Text

1 个答案:

答案 0 :(得分:7)

append将为列表中的每个元素创建一个新数组,并将所有数据复制到该数组中。正如其中一条评论所说,您可能想尝试concat。对于序列,您可以尝试:

import Data.Foldable (toList)
import Data.Sequence (Seq)
import qualified Data.Sequence as S
import Data.Text (Text)
import qualified Data.Text as T

concatSeq :: Seq Text -> Text
concatSeq = T.concat . toList

这应该比使用fold执行append更快,但我还没有验证它。您可以尝试使用标准(这是一个了不起的库)来创建一个小测试用例。