@@ -1,3 +1,7 @@
1+{-# LANGUAGE DerivingStrategies #-}
2+{-# LANGUAGE DerivingVia #-}
3+{-# LANGUAGE DeriveAnyClass #-}
4+
15-- | Testing that our Arbitrary instances do not get stuck and respect the
26-- `size` parameter while generating.
37
@@ -10,36 +14,24 @@ import Test.QuickCheck.Arbitrary.Generic
1014
1115data Unit = Unit
1216 deriving (Eq, Show, Generic)
13−
14−instance NFData Unit
15−
16−instance Arbitrary Unit where
17− arbitrary = genericArbitrary
18− shrink = genericShrink
17+ deriving anyclass NFData
18+ deriving Arbitrary via (GenericArbitrary Unit)
1919
2020prop_unitTotal :: Unit -> Property
2121prop_unitTotal = total
2222
2323data Single = Single Int
2424 deriving (Eq, Show, Generic)
25−
26−instance NFData Single
27−
28−instance Arbitrary Single where
29− arbitrary = genericArbitrary
30− shrink = genericShrink
25+ deriving anyclass NFData
26+ deriving Arbitrary via (GenericArbitrary Single)
3127
3228prop_singleTotal :: Single -> Property
3329prop_singleTotal = total
3430
3531data Multiple = M1 | M2 | M3 Int
3632 deriving (Eq, Show, Generic)
37−
38−instance NFData Multiple
39−
40−instance Arbitrary Multiple where
41− arbitrary = genericArbitrary
42− shrink = genericShrink
33+ deriving anyclass NFData
34+ deriving Arbitrary via (GenericArbitrary Multiple)
4335
4436prop_multipleTotal :: Multiple -> Property
4537prop_multipleTotal = total
@@ -49,12 +41,8 @@ data Rec = Rec
4941 , single :: Single
5042 , multiple :: Multiple
5143 } deriving (Eq, Show, Generic)
52−
53−instance NFData Rec
54−
55−instance Arbitrary Rec where
56− arbitrary = genericArbitrary
57− shrink = genericShrink
44+ deriving anyclass NFData
45+ deriving Arbitrary via (GenericArbitrary Rec)
5846
5947prop_recTotal :: Rec -> Property
6048prop_recTotal = total
@@ -64,13 +52,8 @@ data Expr
6452 | Add Expr Expr
6553 | Mul Expr Expr
6654 deriving (Eq, Show, Generic)
67−
68−-- | Instance with may fall into infinite loop
69−instance Arbitrary Expr where
70− arbitrary = genericArbitrary
71− shrink = genericShrink
72−
73−instance NFData Expr
55+ deriving anyclass NFData
56+ deriving Arbitrary via (GenericArbitrary Expr)
7457
7558prop_exprTotal :: Expr -> Property
7659prop_exprTotal = total
@@ -83,12 +66,8 @@ data Recursive
8366 | R4 Recursive
8467 | R5 Recursive String
8568 deriving (Eq, Show, Generic)
86−
87−instance NFData Recursive
88−
89−instance Arbitrary Recursive where
90− arbitrary = genericArbitrary
91− shrink = genericShrink
69+ deriving anyclass NFData
70+ deriving Arbitrary via (GenericArbitrary Recursive)
9271
9372prop_recursiveTotal :: Recursive -> Property
9473prop_recursiveTotal = total
@@ -97,21 +76,17 @@ data DeepRecursive
9776 = Deep DeepRecursive DeepRecursive DeepRecursive DeepRecursive DeepRecursive
9877 | Short
9978 deriving (Eq, Show, Generic)
100−
101−instance NFData DeepRecursive
102−
103−instance Arbitrary DeepRecursive where
104− arbitrary = genericArbitrary
105− shrink = genericShrink
79+ deriving anyclass NFData
80+ deriving Arbitrary via (GenericArbitrary DeepRecursive)
10681
10782prop_deepRecursiveTotal :: DeepRecursive -> Property
10883prop_deepRecursiveTotal = total
10984
11085data P p = NoP | P p
11186 deriving (Eq, Show, Generic)
87+ deriving anyclass NFData
11288
113−instance (NFData p) => NFData (P p)
114−
89+-- Note that deriving via doesn't work for case with arguments
11590instance (Arg (P p) p, Arbitrary p) => Arbitrary (P p) where
11691 arbitrary = genericArbitrary
11792 shrink = genericShrink