如何将自定义解码函数从“字节字符串”写入“文本”



假设我想写这样的东西:

-- | Decode a 'ByteString' containing Code Page 437 encoded text.
decodeCP437 :: ByteString -> Text
decodeCP437 = undefined

(我知道encoding包,但它的依赖列表为这个单一付出的代价是荒谬的,而且我认为相当微不足道的功能。

我的问题是,如何以合理的效率从ByteString构建Text,特别是在不使用列表的情况下。在我看来,Data.Text.Encoding应该是一个很好的灵感来源,但乍一看它使用withForeignPtr,我想它对于我的用例来说太低了。

应该如何处理这个问题?简而言之,我想我需要不断地从ByteString中获取字节(Word8),将每个字节转换为相应的Char,并以某种方式有效地从中构建TextData.Text Text构造中基本建筑功能的复杂性并不奇怪,这表明一个接一个地附加字符并不是最好的主意,但我没有看到更好的工具。


更新:我想创建严格的Text。似乎唯一的选择是创建构建器,然后从中获取懒惰Text(O(n)),然后转换为严格Text(O(n))。

您可以使用

构建器 API,它提供 O(1) singleton :: Char -> Builder和 O(1) (<>) :: Builder -> Builder -> Builder,以实现高效的施工操作。

最新更新