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 verwendetByteString
s:
compress :: ByteString -> ByteString
decompress :: ByteString -> ByteString
Ich benutze regelmäßigString
s, 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 konvertierenString
s zuByteString
s?Übrigens habe ich festgestellt, dass es funktioniertData.ByteString.Lazy.Char8
'sByteString
, aber ich bin immer noch fasziniert.