Muitos tipos de String (ByteString)

Desejo comprimir o tráfego de rede do meu aplicativo.

De acordo com o (mais recente?)"Haskell Popularidade Rankings", zlib parece ser uma solução bastante popular. A interface do zlib usaByteStrings:

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

Estou usando regularStrings, que também são os tipos de dados usados ​​porread, showeNetwork.Socket:

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

Então, para comprimir minhas cordas, eu preciso de alguma maneira para converter umString para umByteString e vice versa. Comhooglea ajuda, eu encontrei:

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

Tentando usá-lo:

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")

Não, porque (?) Existem diferentes tipos deByteString ?

Então, basicamente:

Existem vários tipos deByteString? Quais tipos e por quê?Qual é "o" caminho para converterStrings paraByteStrings?

Btw, descobri que funciona comData.ByteString.Lazy.Char8'sByteString, mas ainda estou intrigado.

questionAnswers(3)

yourAnswerToTheQuestion