Haskell Как создать Word8?

Я хочу написать простую функцию, которая разбивает ByteString на [ByteString], используя '\n' в качестве разделителя. Моя попытка:

import Data.ByteString

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

Это вызывает ошибку, потому что '\n' является Char, а не Word8, что означает Data.ByteString.splitWith.,

Как превратить этот простой символ в Word8, который будет <<20 > с?

Ответ 1

Вы можете просто использовать числовой литерал 10, но если вы хотите преобразовать символьный литерал, вы можете использовать fromIntegral (ord '\n') (требуется fromIntegral для преобразования Int, который ord возвращается в Word8). Вам нужно будет импортировать Data.Char для ord.

Вы также можете импортировать Data.ByteString.Char8, который предлагает функции для использования Char вместо Word8 в том же типе ByteString. (Действительно, у него есть функция lines, которая делает именно то, что вы хотите.) Однако это обычно не рекомендуется, так как ByteString не хранит кодовые страницы Unicode (что означает Char), а вместо этого необработанные октеты (т.е. Word8 s).

Если вы обрабатываете текстовые данные, вам следует использовать Text вместо ByteString.