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 zlibByteString
s:
compress :: ByteString -> ByteString
decompress :: ByteString -> ByteString
Estoy usando regularString
s, que son también los tipos de datos utilizados porread
, show
yNetwork.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 convertirString
s aByteString
s?Por cierto, encontré que funciona conData.ByteString.Lazy.Char8
esByteString
, pero sigo intrigado