Earlier quoted context omitted.
It can give unexpected/wrong results when working with Unicode strings.
Can you elaborate? Perhaps you are talking about the Char8 ByteString instance? It was a mistake to declare that instance, I think.
Yes. Data.ByteString.Char8.pack does not form an isomorphism with Data.ByteString.Char8.unpack. It is thus not interchangeable with String.
Example:
Prelude Data.ByteString.Char8> putStrLn . unpack . pack $ "Российская Федерация"
>AA89A:0O $545@0F8O
And here the correct result with Data.Text: Prelude Data.Text> putStrLn . unpack . pack $ "Российская Федерация"
Российская Федерация