generic-arbitrary 0.1.0 → 0.2.0
raw patch · 3 files changed
+41/−3 lines, 3 filesdep ~QuickChecknew-uploaderPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: QuickCheck
API changes (from Hackage documentation)
- Test.QuickCheck.Arbitrary.Generic: instance (Test.QuickCheck.Arbitrary.Generic.GArbitrary a, Test.QuickCheck.Arbitrary.Generic.GArbitrary b, GHC.TypeLits.KnownNat (Test.QuickCheck.Arbitrary.Generic.SumLen a), GHC.TypeLits.KnownNat (Test.QuickCheck.Arbitrary.Generic.SumLen b)) => Test.QuickCheck.Arbitrary.Generic.GArbitrary (a GHC.Generics.:+: b)
+ Test.QuickCheck.Arbitrary.Generic: GenericArbitrary :: a -> GenericArbitrary a
+ Test.QuickCheck.Arbitrary.Generic: [unGenericArbitrary] :: GenericArbitrary a -> a
+ Test.QuickCheck.Arbitrary.Generic: instance (GHC.Generics.Generic a, Test.QuickCheck.Arbitrary.Generic.GArbitrary (GHC.Generics.Rep a), Test.QuickCheck.Arbitrary.RecursivelyShrink (GHC.Generics.Rep a), Test.QuickCheck.Arbitrary.GSubterms (GHC.Generics.Rep a) a) => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Arbitrary.Generic.GenericArbitrary a)
+ Test.QuickCheck.Arbitrary.Generic: instance (Test.QuickCheck.Arbitrary.Generic.GArbitrary a, Test.QuickCheck.Arbitrary.Generic.GArbitrary b, GHC.TypeNats.KnownNat (Test.QuickCheck.Arbitrary.Generic.SumLen a), GHC.TypeNats.KnownNat (Test.QuickCheck.Arbitrary.Generic.SumLen b)) => Test.QuickCheck.Arbitrary.Generic.GArbitrary (a GHC.Generics.:+: b)
+ Test.QuickCheck.Arbitrary.Generic: instance GHC.Classes.Eq a => GHC.Classes.Eq (Test.QuickCheck.Arbitrary.Generic.GenericArbitrary a)
+ Test.QuickCheck.Arbitrary.Generic: instance GHC.Show.Show a => GHC.Show.Show (Test.QuickCheck.Arbitrary.Generic.GenericArbitrary a)
+ Test.QuickCheck.Arbitrary.Generic: newtype GenericArbitrary a
Files
- CHANGELOG.md +6/−0
- generic-arbitrary.cabal +9/−2
- src/Test/QuickCheck/Arbitrary/Generic.hs +26/−1
CHANGELOG.md view
@@ -1,3 +1,9 @@+0.2.0+-----++* Added `GenericArbitrary` for use with the [DerivingVia](https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/deriving_via.html) compiler extension.+* Minimum bound on QuickCheck changed to 2.14.+ 0.1.0 -----
generic-arbitrary.cabal view
@@ -1,5 +1,5 @@ name: generic-arbitrary-version: 0.1.0+version: 0.2.0 synopsis: Generic implementation for QuickCheck's Arbitrary description: Generic implementations of methods of the 'Arbitrary' class from the@@ -11,13 +11,20 @@ license-file: LICENSE author: Typeable.io contributors maintainer: makeit@typeable.io+homepage: http://github.com/typeable/generic-arbitrary#readme category: Generic build-type: Simple extra-source-files: CHANGELOG.md cabal-version: >=1.22+tested-with: GHC == 7.10.3+ , GHC == 8.0.2+ , GHC == 8.2.2+ , GHC == 8.4.1+ , GHC == 8.6.5+ , GHC == 8.10.1 library exposed-modules: Test.QuickCheck.Arbitrary.Generic- build-depends: QuickCheck >= 2.8, base >=4.8 && <5+ build-depends: QuickCheck >= 2.14, base >=4.8 && <5 hs-source-dirs: src default-language: Haskell2010
src/Test/QuickCheck/Arbitrary/Generic.hs view
@@ -15,6 +15,16 @@ shrink = genericShrink @ +This instance can also be derived using DerivingVia language extension++@+data Foo = Foo+ { _fooX :: X+ , _fooY :: Y+ } deriving (Generic)+ deriving (Arbitrary) via GenericArbitrary Foo+@+ The generated 'arbitrary' method is equivalent to @Foo <$> arbitrary <*> arbitrary@.@@ -22,16 +32,31 @@ -} module Test.QuickCheck.Arbitrary.Generic- ( Arbitrary(..)+ ( GenericArbitrary(..)+ , Arbitrary(..) , genericArbitrary , genericShrink ) where import Control.Applicative+import Data.Coerce (coerce) import Data.Proxy import GHC.Generics as G import GHC.TypeLits import Test.QuickCheck as QC+import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)++newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }+ deriving (Show, Eq)++instance+ ( Generic a,+ GArbitrary (Rep a),+ RecursivelyShrink (Rep a),+ GSubterms (Rep a) a+ ) => Arbitrary (GenericArbitrary a) where+ arbitrary = coerce (genericArbitrary :: Gen a)+ shrink = coerce (genericShrink :: a -> [a]) class GArbitrary a where gArbitrary :: QC.Gen (a x)