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 usefromIntegral (ord '\n')(thefromIntegralis required to convert theIntthatordreturns into aWord8). You'll have to importData.Charforord.You could also import
Data.ByteString.Char8, which offers functions for usingCharinstead ofWord8on the sameByteStringdata type. (Indeed, it has alinesfunction that does exactly what you want.) However, this is generally not recommended, asByteStrings don't store Unicode codepoints (which is whatCharrepresents) but instead raw octets (i.e.Word8s).If you're processing textual data, you should consider using
Textinstead ofByteString.