@@ -125,23 +125,26 @@ Now everything compiles and works as expected.
127module Test.QuickCheck.Arbitrary.Generic
127module Test.QuickCheck.Arbitrary.Generic
128− ( Arbitrary(..)
128+ ( -- * Main
129#if MIN_VERSION_QuickCheck(2, 14, 0)
131#if MIN_VERSION_QuickCheck(2, 14, 0)
130 , GenericArbitrary(..)
132 , GenericArbitrary(..)
133− , TypesDiffer
135+ -- * Internal
134− , AllFieldsFinal
136+ , GArbitrary
136 , ArgumentsCount
142 , ArgumentsCount
138− , genericArbitrary
144+ -- * Reexports
139− , genericShrink
145+ , Arbitrary(..)
145import Control.Applicative
148import Control.Applicative
146import Data.Coerce (coerce)
149import Data.Coerce (coerce)
147import Data.Proxy
150import Data.Proxy
@@ -155,6 +158,16 @@ import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
157-- | Newtype for @DerivingVia@
160-- | Newtype for @DerivingVia@
168+-- } deriving (Generic)
169+-- deriving (Arbitrary) via GenericArbitrary Foo
158newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
171newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
159 deriving (Show, Eq)
172 deriving (Show, Eq)
@@ -168,6 +181,18 @@ instance
168 shrink = coerce (genericShrink :: a -> [a])
181 shrink = coerce (genericShrink :: a -> [a])
184+-- | Constraint helper for types with parameters
190+-- deriving (Generic)
191+-- instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
192+-- arbitrary = genericArbitrary
193+-- shrink = genericShrink
171type Arg self field = (TypesDiffer self field ~ 'True)
196type Arg self field = (TypesDiffer self field ~ 'True)
173type family TypesDiffer a b where
198type family TypesDiffer a b where