简体   繁体   中英

Haskell How to Create a Word8?

I want to write a simple function which splits a ByteString into [ByteString] using '\\n' as the delimiter. My attempt:

import Data.ByteString

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

This throws an error because '\\n' is a Char rather than a Word8 , which is what Data.ByteString.splitWith is expecting.

How do I turn this simple character into a Word8 that ByteString will play with?

You could just use the numeric literal 10 , but if you want to convert the character literal you can use fromIntegral (ord '\\n') (the fromIntegral is required to convert the Int that ord returns into a Word8 ). You'll have to import Data.Char for ord .

You could also import Data.ByteString.Char8 , which offers functions for using Char instead of Word8 on the same ByteString data type. (Indeed, it has a lines function that does exactly what you want.) However, this is generally not recommended, as ByteString s don't store Unicode codepoints (which is what Char represents) but instead raw octets (ie Word8 s).

If you're processing textual data, you should consider using Text instead of ByteString .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM