Попытка использования Data.Binary.Get и ByteString и непонимание того, что происходит. Мой код ниже:Haskell ByteString/Data.Binary.Показать вопрос
getSegmentParams :: Get (Int, L.ByteString)
getSegmentParams = do
seglen <- liftM fromIntegral getWord16be
params <- getByteString (seglen - 2)
return (seglen, params)
Я получаю следующую ошибку против третьего пункта обратного кортежа, т.е. полезной нагрузки:
Couldn't match expected type `L.ByteString'
against inferred type `bytestring-0.9.1.4:Data.ByteString.Internal.ByteString'
Кто-то пожалуйста, объясните мне, взаимодействие между Data.Binary.Get и ByteStrings и как я могу делать то, что я намереваюсь. Благодарю.
Вам не нужно конвертировать в Lazy ByteString - просто получить его непосредственно через 'getLazyByteString'. Документы пикши великолепны. –
Это тоже работает. =) –
Совершенно верно в этом случае. Стоит отметить, что это совершенно другая операция. Использование 'getByteString', когда оно не понадобится, заставит весь« seglen »байтов, в то время как' getLazyByteString' останется ленивым. Возможно, это неважно, когда максимальный размер составляет 64 КБ, но если это был 'getWord32be', тогда вам, скорее всего, понадобится ленивое поведение вместо потенциального форсирования 32 ГБ. –