Haskell如何创建Word8?

Xan*_*unn 12 string haskell bytestring

我想编写一个简单的函数,它分割一个ByteString[ByteString]使用'\n'作为分隔符.我的尝试:

import Data.ByteString

listize :: ByteString -> [ByteString]
listize xs = Data.ByteString.splitWith (=='\n') xs
Run Code Online (Sandbox Code Playgroud)

这会引发错误,因为它'\n'是一个Char而不是一个Word8,这Data.ByteString.splitWith是期待的.

如何打开这个简单的字符为Word8ByteString会玩?

ehi*_*ird 14

你可以只使用数字文字10,但如果你想转换你可以使用的字符文字fromIntegral (ord '\n')(fromIntegral需要将Intord返回到a Word8).你必须进口Data.Charord.

您也可以导入Data.ByteString.Char8,它提供了使用Char而不是使用Word8相同ByteString数据类型的功能.(实际上,它有一个lines完全符合你想要的功能.)但是,这通常推荐,因为ByteStrings 存储Unicode代码点(Char代表什么),而是存储原始八位字节(即Word8s).

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

  • 至于你的程序的适当类型,它取决于具体的格式和你正在做什么,但如果它们不包含任何二进制数据,那么`Text`将正常工作.但是,如果字符串始终是纯ASCII,并且您正在处理大量数据,那么`ByteString`可能会更快. (2认同)