美好的一天.
我现在讨厌Haskell的一件事是用于处理字符串的数量.
首先我使用了原生的Haskell [Char]字符串,但是当我尝试开始使用hackage库时,完全失去了无休止的转换.每个包似乎都使用不同的字符串实现,有些采用自己手工制作的东西.
接下来我用Data.Text字符串和OverloadedStrings扩展名重写了我的代码,我选择了Text因为它有更广泛的功能集,但似乎很多项目更喜欢ByteString.
有人可以简短推理为什么要使用其中一个?
PS:顺便想怎么转换Text成ByteString?
无法匹配期望类型 Data.ByteString.Lazy.Internal.ByteString 对抗推断类型文本 预期类型:IO Data.ByteString.Lazy.Internal.ByteString推断类型:IO文本
我试过encodeUtf8了Data.Text.Encoding,但没有运气:
无法匹配期望类型 Data.ByteString.Lazy.Internal.ByteString 对抗推断类型Data.ByteString.Internal.ByteString
UPD:
谢谢你的回复,*Chunks的善良看起来像是要走的路,但我对结果感到有些震惊,我原来的功能看起来像这样:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
Run Code Online (Sandbox Code Playgroud)
现在成了:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS …Run Code Online (Sandbox Code Playgroud)