Эквивалентной функцией в Haskell binary
является функция getByteString
.
getByteString :: Int -> Get ByteString
getByteString 6 :: Get ByteString
example = runGet (getByteString 6) "my binary string" :: ByteString
. Используйте do-notation для составления Get
парсеров. Существует также getRemainingLazyByteString
для получения остальной части строки байтов, но имейте в виду, что, хотя это полезно для разбора в стиле Elixir / Erlang, в Haskell композиция синтаксических анализаторов включает большую часть этого:
getThreeBS :: Get (ByteString, ByteString, ByteString)
getThreeBS = do
x <- getByteString 2
y <- getByteString 3
z <- getRemainingLazyByteString
return (x, y, z)
example1 = runGet getThreeBS "Hello World!" -- ("He", "llo", " World!")
Другая важная функция: Control.Monad.replicateM
:
replicateM :: Int -> Get a -> Get [a]
example2 = runGet (replicateM 5 getWord8) (ByteString.pack [18, 22, 13, 44, 52, 99]) :: [Word8]