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 zlibByteStrings:

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

Używam zwykłegoStrings, 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ęStrings doByteStrings?

Przy okazji odkryłem, że działaData.ByteString.Lazy.Char8jestByteString, ale wciąż jestem zaintrygowany.

questionAnswers(3)

yourAnswerToTheQuestion