@@ -16,6 +16,7 @@ module QC.Common
1616import Control.Applicative ((<$>), (<*>))
1717import Data.Char (isAlpha)
1818import Test.QuickCheck
19+import Test.QuickCheck.Unicode (shrinkChar, string)
1920import qualified Data.ByteString as B
2021import qualified Data.ByteString.Lazy as BL
2122import qualified Data.Text as T
@@ -55,29 +56,13 @@ repackBS_ = go . cycle
5556 in h : go bs t
5657 go _ _ = error "unpossible"
5758
58−
59−newtype Unicode = Unicode {fromUnicode :: Char}
60−
61−valid :: Unicode -> Bool
62−valid (Unicode c) = c < '\55296' || '\57343' < c
63−
64−instance Arbitrary Unicode where
65− arbitrary = fmap Unicode (oneof [arbitrary, arbitraryBoundedEnum]) `suchThat` valid
66− shrink = filter valid . map (Unicode . toEnum) . shrink . fromEnum . fromUnicode
67−
68−packUnicode :: [Unicode] -> T.Text
69−packUnicode = T.pack . map fromUnicode
70−
71−unpackUnicode :: T.Text -> [Unicode]
72−unpackUnicode = map Unicode . T.unpack
73−
7459instance Arbitrary T.Text where
75− arbitrary = packUnicode <$> arbitrary
76− shrink = map packUnicode . shrink . unpackUnicode
60+ arbitrary = T.pack <$> string
61+ shrink = map T.pack . shrinkList shrinkChar . T.unpack
7762
7863instance Arbitrary TL.Text where
79− arbitrary = repackT <$> arbitrary <*> arbitrary
80− shrink = map TL.fromChunks . shrink . TL.toChunks
64+ arbitrary = TL.pack <$> string
65+ shrink = map TL.pack . shrinkList shrinkChar . TL.unpack
8166
8267repackT :: Repack -> T.Text -> TL.Text
8368repackT (NonEmpty bs) =