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 usaByteString
s:
compress :: ByteString -> ByteString
decompress :: ByteString -> ByteString
Estou usando regularString
s, que também são os tipos de dados usados porread
, show
eNetwork.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 converterString
s paraByteString
s?Btw, descobri que funciona comData.ByteString.Lazy.Char8
'sByteString
, mas ainda estou intrigado.