Как получить n-й байт от ByteString? - PullRequest
0 голосов
/ 22 декабря 2018

Как я могу получить n-й байт ByteString в Haskell?

Я пытался найти функцию типа !! для ByteStrings, но ничего не нашел.

1 Ответ

0 голосов
/ 22 декабря 2018

ByteString.index - это функция, которую вы ищете.

Большинство «контейнерных» типов эмулируют расширенный интерфейс списка;Вы также должны быть осторожны, потому что эта функция index приведет к сбою программы, если вы передадите ей слишком короткую строку (как и !! в обычных списках).Лучшая реализация может быть

import Data.ByteString as B
nthByte :: Int -> B.ByteString -> Maybe Word8
nthByte n bs = fst <$> B.uncons (B.drop n bs)

, которая, читая наизнанку, сбрасывает первые n байт (возможно, генерируя пустую строку байтов), а затем пытается отделить первый символ от остаткаи в случае успеха игнорирует остальную часть строки.

...