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

时间:2016-02-28 11:15:44

标签: haskell text encoding bytestring

假设我想写这样的东西:

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

decodeCP437 :: ByteString -> Text
decodeCP437 = undefined

(我知道encoding包,但它的依赖列表是支付这个单一的荒谬价格,我相信相当简单的功能。)

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

应如何处理问题?简而言之,我想我需要不断从Word8获取字节(ByteString),将每个字节转换为相应的Char,并以某种方式从它们有效地构建TextData.Text Text Textbasic building functions的复杂性并不令人惊讶地表明逐个追加字符不是最佳选择,但我看不到更好的工具。

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

1 个答案:

答案 0 :(得分:4)

您可以使用Builder API,它提供O(1)singleton :: Char -> Builder和O(1)(<>) :: Builder -> Builder -> Builder,以进行有效的构建操作。