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

5
我正在将一个使用 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 中使用?

6
你是否在寻找 Data.ByteString.Lazy.fromStrict 这个函数? - Mikhail Glushenkov
1个回答

4

首先,Data.ByteString.Char8是一个模块,而不是一种类型。同样适用于Data.ByteString.Lazy。假设你理解了这一点,并且注意到Data.ByteString.Char8.ByteString实际上是Data.ByteString.ByteString的重新导出。所以你只需要使用Mikail Glushenkov提到的fromStrict函数。


那很明显。谢谢Mikhail和Thomas。 - Alain O'Dea
迟做总比不做好。我已经在我的问题中纠正了模块/类型混淆。 - Alain O'Dea
@AlainO'Dea 很好,很高兴看到你还在不断地编程! - Thomas M. DuBuisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接