Haskell 如何将自定义解码函数从'ByteString'写入'Text'`

Haskell 如何将自定义解码函数从'ByteString'写入'Text'`,haskell,text,encoding,bytestring,Haskell,Text,Encoding,Bytestring,假设我想写这样的东西: -- | Decode a 'ByteString' containing Code Page 437 encoded text. decodeCP437 :: ByteString -> Text decodeCP437 = undefined (我知道编码软件包,但它的依赖项列表为这一个软件包付出了荒谬的代价,而且我相信它的功能相当琐碎。) 我的问题是如何从通过testring合理高效地构造文本,特别是在不使用列表的情况下。在我看来,Data.Text.En

假设我想写这样的东西:

-- | Decode a 'ByteString' containing Code Page 437 encoded text.

decodeCP437 :: ByteString -> Text
decodeCP437 = undefined
(我知道
编码
软件包,但它的依赖项列表为这一个软件包付出了荒谬的代价,而且我相信它的功能相当琐碎。)

我的问题是如何从
通过testring
合理高效地构造
文本,特别是在不使用列表的情况下。在我看来,
Data.Text.Encoding
应该是一个很好的灵感来源,但乍一看,它使用了
和foreignptr
,我想对于我的用例来说,它的级别太低了

如何处理这个问题?简而言之,我想我需要通过testring不断地从
中提取字节(
Word8
),将每个字节翻译成相应的
Char
,并以某种方式有效地从它们构建
文本。对于
Text
结构,in
Data.Text
的复杂性不足为奇地表明,逐个添加字符并不是最好的主意,但我看不到更好的工具



更新:我想创建严格的
文本
。似乎唯一的选择是创建生成器,然后从中获得惰性的
文本(O(n)),然后转换为严格的
文本(O(n))。

您可以使用API,它提供O(1)
singleton::Char->builder
和O(1)
():Builder->Builder->Builder
用于高效的构造操作。

您可以使用API,它提供O(1)
singleton::Char->Builder
和O(1)
()::Builder->Builder->Builder
用于高效的构造操作。

文本如何?文本如何?如果我想构造严格的
文本如何?@标记“是”,我知道
toStrict
,但这是对整个数据的另一次传递。不过,看起来这是唯一的选择。谢谢。如果我想构造严格的
文本
,怎么办?@Mark Yes我知道关于
toStrict
,但这是对整个数据的另一次传递。不过,看起来这是唯一的选择。谢谢