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

Haskell 需要一种有效的方法将(Seq Data.Text)转换为Data.Text,haskell,Haskell,我有一个程序(一个使用Text.XML.Expat.SAX的SAX解析器),它使用Data.Text内容的重复附加,使用Data.Sequence(|>)像这样构建非常大的CDATA节点: existingText |> newTextChunk 这将建立一个非常大的Seq Text类型的数据块 建立数据后,我需要转换Seq Text->Text。但我尝试的解决方案非常慢: Data.Foldable.foldr1 Data.Text.append seqText 有没有更快的方法将文

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

existingText |> newTextChunk
这将建立一个非常大的
Seq Text
类型的数据块

建立数据后,我需要转换
Seq Text->Text
。但我尝试的解决方案非常慢:

Data.Foldable.foldr1 Data.Text.append seqText
有没有更快的方法将文本序列转换为纯文本数据


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

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

这应该比使用
append
进行
折叠
要快,但我还没有验证它。您可以尝试使用Criteria(这是一个惊人的库)快速生成一个小测试用例。

我希望最后一个问题的答案是。你试过了吗?