Как я могу получить n-й байт ByteString в Haskell?
Я пытался найти функцию типа !!
для ByteStrings, но ничего не нашел.
Как я могу получить n-й байт ByteString в Haskell?
Я пытался найти функцию типа !!
для ByteStrings, но ничего не нашел.
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 байтов (возможно, создавая пустую строку байтов), затем пытается отделить первый символ от остатка и в случае успеха игнорирует остальную часть строки.