我正在将一个软件包从使用 GHC.IO.Handle 进行网络转换为 Network.Connection.Connection 。其中一个难点是将 Data.ByteString.Lazy.ByteString 更改为 Data.ByteString.Char8.ByteString 的位置数。
示例函数是:
import qualified Data.ByteString.Lazy as BL
-- gets the size of the frame
-- the bytestring should be at least 7 bytes long, otherwise this method will fail
peekFrameSize :: BL.ByteString -> PayloadSize
peekFrameSize = runGet f
where
f = do
void $ getWord8 -- 1 byte
void $ (get :: Get ChannelID) -- 2 bytes
get :: Get PayloadSize -- 4 bytes
如何将 Data.ByteString.Char8.ByteString 转换为 Data.ByteString.Lazy.ByteString ,以便在 Data.Binary.Get
答案 0 :(得分:3)
首先,Data.ByteString.Char8
是一个模块,而不是一个类型。与Data.ByteString.Lazy
相同。也就是说,假设显而易见,那么Data.ByteString.Char8.ByteString
实际上是Data.ByteString.ByteString
的再出口。所以你需要的只是Mikail Glushenkov提到的fromStrict
函数。