我想编写一个简单的函数,使用ByteString
作为分隔符将[ByteString]
拆分为'\n'
。我的尝试:
import Data.ByteString
listize :: ByteString -> [ByteString]
listize xs = Data.ByteString.splitWith (=='\n') xs
这会引发错误,因为'\n'
是Char
而不是Word8
,这是Data.ByteString.splitWith
所期待的。
如何将此简单字符转换为Word8
将使用的ByteString
?
答案 0 :(得分:14)
您可以使用数字文字10
,但如果您想转换字符文字,可以使用fromIntegral (ord '\n')
(转换fromIntegral
需要Int
ord
返回Word8
)。您必须为Data.Char
导入ord
。
您还可以导入Data.ByteString.Char8
,其中提供了在同一Char
数据类型上使用Word8
而不是ByteString
的功能。 (实际上,它具有lines
功能,可以完全按照您的要求进行操作。)但是,这通常是不推荐,因为ByteString
s 不会存储Unicode代码点(这是Char
代表的),而是原始八位字节(即Word8
s)。
如果您正在处理文字数据,则应考虑使用Text
代替ByteString
。