git.iko.soy/typeable/generic-arbitrary
on master help sign in
arrange docs
0744e14Aleksey Uymanov
src/Test/QuickCheck/Arbitrary/Generic.hs+33−8
@@ -125,23 +125,26 @@ Now everything compiles and works as expected.
125-}
125-}
126
126
127module Test.QuickCheck.Arbitrary.Generic
127module Test.QuickCheck.Arbitrary.Generic
128− ( Arbitrary(..)
128+ ( -- * Main
129+ genericArbitrary
130+ , genericShrink
129#if MIN_VERSION_QuickCheck(2, 14, 0)
131#if MIN_VERSION_QuickCheck(2, 14, 0)
130 , GenericArbitrary(..)
132 , GenericArbitrary(..)
131#endif
133#endif
132 , Arg
134 , Arg
133− , TypesDiffer
135+ -- * Internal
134− , AllFieldsFinal
136+ , GArbitrary
137+ , FiniteSum
138+ , FiniteSumElem
135 , Finite
139 , Finite
140+ , AllFieldsFinal
141+ , TypesDiffer
136 , ArgumentsCount
142 , ArgumentsCount
137 , SumLen
143 , SumLen
138− , genericArbitrary
144+ -- * Reexports
139− , genericShrink
145+ , Arbitrary(..)
140 ) where
146 ) where
141
147
142−
143−
144−
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)
155
158
156
159
157-- | Newtype for @DerivingVia@
160-- | Newtype for @DerivingVia@
161+--
162+-- Usage:
163+--
164+-- @
165+-- data Foo = Foo
166+-- { _fooX :: X
167+-- , _fooY :: Y
168+-- } deriving (Generic)
169+-- deriving (Arbitrary) via GenericArbitrary Foo
170+-- @
158newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
171newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
159 deriving (Show, Eq)
172 deriving (Show, Eq)
160
173
@@ -168,6 +181,18 @@ instance
168 shrink = coerce (genericShrink :: a -> [a])
181 shrink = coerce (genericShrink :: a -> [a])
169#endif
182#endif
170
183
184+-- | Constraint helper for types with parameters
185+--
186+-- Usage:
187+--
188+-- @
189+-- data A a = A a
190+-- deriving (Generic)
191+-- instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
192+-- arbitrary = genericArbitrary
193+-- shrink = genericShrink
194+-- @
195+
171type Arg self field = (TypesDiffer self field ~ 'True)
196type Arg self field = (TypesDiffer self field ~ 'True)
172
197
173type family TypesDiffer a b where
198type family TypesDiffer a b where