Viele Arten von Strings (ByteString)

Ich möchte den Netzwerkverkehr meiner Anwendung komprimieren.

Nach dem (spätestens?)"Haskell Beliebtheitsrangliste", zlib scheint eine ziemlich beliebte Lösung zu sein. Die Schnittstelle von zlib verwendetByteStrings:

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

Ich benutze regelmäßigStrings, die auch die von verwendeten Datentypen sindread, show, undNetwork.Socket:

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

Um meine Strings zu komprimieren, brauche ich eine Möglichkeit, aString zu einemByteString und umgekehrt. MithoogleHilfe fand ich:

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

Versuch es zu benutzen:

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

Scheitert, weil (?) Es verschiedene Arten von gibtByteString ?

Also im Grunde genommen:

Gibt es verschiedene Arten vonByteString? Welche Typen und warum?Was ist "der" Weg, um zu konvertierenStrings zuByteStrings?

Übrigens habe ich festgestellt, dass es funktioniertData.ByteString.Lazy.Char8'sByteString, aber ich bin immer noch fasziniert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage