@@ -29,28 +29,32 @@ arbitraryPositiveScientific = (fromFloatDigits :: Double -> Scientific)
2929 . getPositive
3030 <$> arbitrary
3131
32−arbitraryValue :: Gen Value
33−arbitraryValue = sized f
34− where
35− f :: Int -> Gen Value
36− f n | n <= 1 = oneof nonRecursive
37− | otherwise = oneof $
38− fmap (Array . V.fromList) (traverse (const (f (n `div` 10)))
39− =<< (arbitrary :: Gen [()]))
40− : fmap (Object . HM.fromList) (traverse (const (g (n `div` 10)))
41− =<< (arbitrary :: Gen [()]))
42− : nonRecursive
43−
44− g :: Int -> Gen (Text, Value)
45− g n = (,) <$> arbitraryText <*> f n
46−
47− nonRecursive :: [Gen Value]
48− nonRecursive =
49− [ pure Null
50− , Bool <$> arbitrary
51− , String <$> arbitraryText
52− , Number <$> arbitraryScientific
53− ]
32+newtype ArbitraryValue
33+ = ArbitraryValue { _unArbitraryValue :: Value }
34+ deriving (Eq, Show)
35+
36+instance Arbitrary ArbitraryValue where
37+ arbitrary = ArbitraryValue <$> sized f
38+ where
39+ f :: Int -> Gen Value
40+ f n | n <= 1 = oneof nonRecursive
41+ | otherwise = oneof $
42+ fmap (Array . V.fromList) (traverse (const (f (n `div` 10)))
43+ =<< (arbitrary :: Gen [()]))
44+ : fmap (Object . HM.fromList) (traverse (const (g (n `div` 10)))
45+ =<< (arbitrary :: Gen [()]))
46+ : nonRecursive
47+
48+ g :: Int -> Gen (Text, Value)
49+ g n = (,) <$> arbitraryText <*> f n
50+
51+ nonRecursive :: [Gen Value]
52+ nonRecursive =
53+ [ pure Null
54+ , Bool <$> arbitrary
55+ , String <$> arbitraryText
56+ , Number <$> arbitraryScientific
57+ ]
5458
5559arbitraryHashMap :: Arbitrary a => Gen (HashMap Text a)
5660arbitraryHashMap = HM.fromList . fmap (first T.pack) <$> arbitrary