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 (i.e. Word8
s).
If you're processing textual data, you should consider using Text
instead of ByteString
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With