Muchos tipos de String (ByteString)

Deseo comprimir el tráfico de red de mi aplicación.

Según el (¿más reciente?)"Clasificación de popularidad Haskell", zlib Parece ser una solución bastante popular. usos de la interfaz de zlibByteStrings:

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

Estoy usando regularStrings, que son también los tipos de datos utilizados porread, showyNetwork.Socket:

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

Así que para comprimir mis cuerdas, necesito alguna forma de convertir unString a unByteString y viceversa. ConhoogleLa ayuda encontré:

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

Tratando de usarlo:

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

Falla, porque (?) Hay diferentes tipos deByteString ?

Así que básicamente:

¿Hay varios tipos deByteString? ¿Qué tipos y por qué?¿Cuál es "la" forma de convertirStrings aByteStrings?

Por cierto, encontré que funciona conData.ByteString.Lazy.Char8esByteString, pero sigo intrigado

Respuestas a la pregunta(3)

Su respuesta a la pregunta