14

我想编写一个简单的函数,将 a 拆分为ByteString用作分隔符。我的尝试:[ByteString]'\n'

import Data.ByteString

listize :: ByteString -> [ByteString]
listize xs = Data.ByteString.splitWith (=='\n') xs

这会引发错误,因为'\n'is aChar而不是 a Word8,这Data.ByteString.splitWith是预期的。

如何将这个简单的角色变成Word8可以ByteString玩的角色?

4

1 回答 1

16

您可以只使用数字文字10,但如果您想转换可以使用的字符文字fromIntegral (ord '\n')(将返回的 转换为 afromIntegral是必需的)。您必须为.IntordWord8Data.Charord

您还可以 import Data.ByteString.Char8,它提供了使用Char而不是Word8在同一ByteString数据类型上使用的功能。(确实,它有一个lines功能可以完全满足您的要求。)但是,通常建议这样做,因为ByteStrings存储 Unicode 代码点(它Char代表什么),而是存储原始八位字节(即Word8s)。

如果您正在处理文本数据,则应考虑使用Text而不是ByteString.

于 2012-01-23T01:48:56.350 回答