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

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

12 голосов
/ 23 января 2012

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

import Data.ByteString

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

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

Как превратить этого простого персонажа в Word8, с которым ByteString будет играть?

1 Ответ

14 голосов
/ 23 января 2012

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

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

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

...