如何将Data.ByteString.Char8转换为Data.ByteString.Lazy以在Data.Binary.Get中使用?

时间:2013-11-29 03:12:11

标签: haskell

我正在将一个软件包从使用 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

1 个答案:

答案 0 :(得分:3)

首先,Data.ByteString.Char8是一个模块,而不是一个类型。与Data.ByteString.Lazy相同。也就是说,假设显而易见,那么Data.ByteString.Char8.ByteString实际上是Data.ByteString.ByteString的再出口。所以你需要的只是Mikail Glushenkov提到的fromStrict函数。