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

Ala*_*Dea 5 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
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*son 4

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