試圖使用Data.Binary.Get和ByteString,而不理解發生了什麼。我的代碼如下:Haskell ByteString/Data.Binary.Get question
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直接獲取一個即可。黑線鱈文檔非常棒。 – 2010-03-10 00:14:34
也可以。 =) – 2010-03-10 13:55:16
在這種情況下確實如此。值得注意的是這是一個截然不同的操作。不需要時使用'getByteString'會強制整個'seglen'字節,而'getLazyByteString'將保持惰性。也許這在最大大小爲64kB時並不重要,但如果這是'getWord32be',那麼您可能需要懶惰行爲而不是可能強制32GB分配。 – 2010-03-10 17:03:19