For reference, this is the property:
propConcatPS :: [String] -> Bool
propConcatPS ss = concat ss == BC.unpack (B.concat $ map BC.pack ss)
This is wrong. We don't even have
propRoundtrip :: String -> Bool
propRoundtrip s = s == BC.unpack (BC.pack s)
It fails for any String that contains a codepoint outside the ASCII
range since BC.pack throws away the upper bits.
This was previously undetected since quickcheck's standard instance
arbitrary String (or Char) did not produce non-ASCII characters. See
here. Quote from
http://hackage.haskell.org/package/QuickCheck-2.11.3/changelog
"""
* Random strings and characters now include Unicode characters by
default. To generate only ASCII characters, use the new ASCIIString
modifier or arbitraryASCIIChar generator. The following modifiers and
generators also control the kind of strings generated: UnicodeString,
PrintableString, arbitraryUnicodeChar, arbitraryPrintableChar.
"""
|