Wiele typów łańcuchów (ByteString)
Chcę skompresować ruch sieciowy mojej aplikacji.
Według (najnowszych?)„Rankingi popularności Haskella”, zlib wydaje się być dość popularnym rozwiązaniem. wykorzystuje interfejs zlibByteString
s:
compress :: ByteString -> ByteString
decompress :: ByteString -> ByteString
Używam zwykłegoString
s, które są również typami danych używanych przezread
, show
, iNetwork.Socket
:
sendTo :: Socket -> String -> SockAddr -> IO Int
recvFrom :: Socket -> Int -> IO (String, Int, SockAddr)
Aby skompresować moje ciągi, potrzebuję sposobu na przekonwertowanieString
do aByteString
i wzajemnie. Zhooglepomoc, znalazłem:
Data.ByteString.Char8 pack :: String -> ByteString
Próbuję go użyć:
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")
Nie, ponieważ (?) Istnieją różne typyByteString
?
Więc w zasadzie:
Czy istnieje kilka rodzajówByteString
? Jakie typy i dlaczego?Co to jest „sposób” na konwersjęString
s doByteString
s?Przy okazji odkryłem, że działaData.ByteString.Lazy.Char8
jestByteString
, ale wciąż jestem zaintrygowany.