再见。
现在我讨厌 Haskell 的一件事就是大量使用字符串的包。
首先,我使用的是原生的 Haskell[Char]
字符串,但当我尝试开始使用黑客库时,却完全迷失在无穷无尽的转换中。每个包似乎都使用了不同的字符串实现,有的采用了自己手工制作的东西。
Next I rewrote my code with Data.Text
strings and OverloadedStrings
extension, I chose Text
because it has a wider set of functions, but it seems many projects prefer ByteString
.
有人可以给出简短的理由为什么使用其中之一或其他?
顺便问一下,如何从 Text
转换到 ByteString
?
不符合预期类型 数据。字节串。懒惰。内部。字节串 对抗推断的 短信型 期望类型: IO 数据。字节串。延迟。内部。字节串 推断类型: IO 文本
我试了 Data.Text.Encoding
的 encodeUtf8
,但没有结果:
不符合预期类型 数据。字节串。懒惰。内部。字节串 根据推断类型 < em > Data. ByteString. Internal. ByteString
UPD:
Thanks for responses, that *Chunks goodness looks like way to go, but I somewhat shocked with result, my original function looked like this:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
现在变成了:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS t = decodeUtf8 $ intercalate "" $ toChunks t
是的,这个函数没有工作,因为它是错误的,如果我们提供 Text
给它,那么我们确信这个文本已经被正确编码,准备好使用和转换它是愚蠢的事情,但是这样一个冗长的转换仍然必须发生在 htmltoItems
之外的某个地方。