多类型的字符串(ByteString)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我想压缩我的应用程序的网络流量。

zlib似乎是一个非常受欢迎的解决方案。zlib的接口使用ByteStrings:

compress :: ByteString -> ByteString
decompress :: ByteString -> ByteString

我使用常规字符串,它们也是read,show和Network.Socket使用的数据类型

sendTo :: Socket -> String -> SockAddr -> IO Int
recvFrom :: Socket -> Int -> IO (String, Int, SockAddr)

所以要压缩我的字符串,我需要一些方法将字符串转换为ByteString,反之亦然。在hoogle的帮助下,我发现:

Data.ByteString.Char8 pack :: String -> ByteString

我使用:

Prelude Codec.Compression.Zlib Data.ByteString.Char8> compress (pack "boo")

<interactive>:1:10:
    Couldn't match expected type `Data.ByteString.Lazy.Internal.ByteString'
           against inferred type `ByteString'
    In the first argument of `compress', namely `(pack "boo")'
    In the expression: compress (pack "boo")
In the definition of `it': it = compress (pack "boo")

失败,因为(?)有不同类型的ByteString?

提问于
用户回答回答于

这个

import Data.ByteString as BS
import Data.ByteString.Lazy as LBS

lazyToStrictBS :: LBS.ByteString -> BS.ByteString
lazyToStrictBS x = BS.concat $ LBS.toChunks x

扫码关注云+社区