git.iko.soy/typeable/generic-arbitrary
on master help sign in
.github/workflows/haskell-ci.yml+17−4
since splitsnapshots
unifiedsplit
@@ -1,16 +1,29 @@
1name: Haskell-CI
1name: Haskell-CI
2−on: [push]
2+on: [push, pull_request]
3jobs:
3jobs:
4 linux:
4 linux:
5− name: ${{ matrix.stack-yaml }}
5+ name: GHC-${{ matrix.ghc-version }}
6 runs-on: ubuntu-latest
6 runs-on: ubuntu-latest
7 strategy:
7 strategy:
8 matrix:
8 matrix:
9− stack-yaml: [stack.yaml, lts-18.18.yaml, lts-13.21.yaml]
9+ ghc-version:
10+ - 8.6.5
11+ - 8.10.7
12+ - 9.0.2
13+ - 9.2.4
14+ - 9.4.3
15+ - 9.8.1
10 steps:
16 steps:
11 - uses: actions/checkout@v3
17 - uses: actions/checkout@v3
12 - uses: haskell/actions/setup@v2
18 - uses: haskell/actions/setup@v2
13 with:
19 with:
14 enable-stack: true
20 enable-stack: true
21+ ghc-version: ${{ matrix.ghc-version }}
15 stack-version: 'latest'
22 stack-version: 'latest'
23+ - uses: actions/cache@v3
24+ with:
25+ path: |
26+ ~/.stack
27+ ./.stack-work
28+ key: ${{ matrix.ghc-version }}
16− - run: stack --stack-yaml ${{ matrix.stack-yaml }} --install-ghc test --fast --haddock
29+ - run: stack --stack-yaml ghc-${{ matrix.ghc-version }}.yaml --install-ghc test --fast --haddock
CHANGELOG.md+16
@@ -1,3 +1,19 @@
1+1.0.1.2
2+-------
3+
4+* Fix dependency bounds (including retroactively), and compilation with warnings.
5+
6+1.0.1.1
7+-------
8+
9+* Fix compilation with GHC 9.8.3
10+
11+1.0.1
12+-----
13+
14+* Compillability by GHC-9.2.4
15+* Fix cabal `tested-with` field
16+
11.0.0
171.0.0
2-----
18-----
3
19
README.md+20−17
@@ -93,7 +93,7 @@ there is a problem with mutually recursive types.
93
93
94# Type parameters
94# Type parameters
95
95
96−Now lets see an example of datatype with parameters
96+Now let's see an example of datatype with parameters
97
97
98``` haskell
98``` haskell
99data A a = A a
99data A a = A a
@@ -108,25 +108,28 @@ instance (Arbitrary a) => Arbitrary (A a) where
108
108
109It should work from first glance, but when compile it will throw an error:
109It should work from first glance, but when compile it will throw an error:
110
110
111+```
111−> • Could not deduce (Test.QuickCheck.Arbitrary.Generic.GArbitrary
112+• Could not deduce (Test.QuickCheck.Arbitrary.Generic.GArbitrary
112−> (A a)
113+ (A a)
113−> (GHC.Generics.D1
114+ (GHC.Generics.D1
114−> ('GHC.Generics.MetaData "A" "ParametersTest" "main" 'False)
115+ ('GHC.Generics.MetaData "A" "ParametersTest" "main" 'False)
115−> (GHC.Generics.C1
116+ (GHC.Generics.C1
116−> ('GHC.Generics.MetaCons "A" 'GHC.Generics.PrefixI 'False)
117+ ('GHC.Generics.MetaCons "A" 'GHC.Generics.PrefixI 'False)
117−> (GHC.Generics.S1
118+ (GHC.Generics.S1
118−> ('GHC.Generics.MetaSel
119+ ('GHC.Generics.MetaSel
119−> 'Nothing
120+ 'Nothing
120−> 'GHC.Generics.NoSourceUnpackedness
121+ 'GHC.Generics.NoSourceUnpackedness
121−> 'GHC.Generics.NoSourceStrictness
122+ 'GHC.Generics.NoSourceStrictness
122−> 'GHC.Generics.DecidedLazy)
123+ 'GHC.Generics.DecidedLazy)
123−> (GHC.Generics.Rec0 a))))
124+ (GHC.Generics.Rec0 a))))
124−> (TypesDiffer (A a) a))
125+ (TypesDiffer (A a) a))
125−> arising from a use of ‘genericArbitrary’
126+ arising from a use of ‘genericArbitrary’
127+```
126
128
127Here the `TypesDiffer` is a type familty dealing with recursive types and
129Here the `TypesDiffer` is a type familty dealing with recursive types and
128helping us to eliminate inproper instances. To convince the compiller, that the
130helping us to eliminate inproper instances. To convince the compiller, that the
129−`a` parameter is not an `A a` we must fix the instance with additional constraint
131+`a` parameter is not an `A a` we must fix the instance with additional
132+constraint `Arg (A a) a`
130
133
131``` haskell
134``` haskell
132instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
135instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
generic-arbitrary.cabal+18−13
@@ -1,5 +1,5 @@
1name: generic-arbitrary
1name: generic-arbitrary
2−version: 1.0.0
2+version: 1.0.1.2
3synopsis: Generic implementation for QuickCheck's Arbitrary
3synopsis: Generic implementation for QuickCheck's Arbitrary
4description:
4description:
5 Generic implementations of methods of the 'Arbitrary' class from the
5 Generic implementations of methods of the 'Arbitrary' class from the
@@ -15,9 +15,14 @@ homepage: http://github.com/typeable/generic-arbitrary#readme
15category: Generic
15category: Generic
16build-type: Simple
16build-type: Simple
17extra-source-files: CHANGELOG.md
17extra-source-files: CHANGELOG.md
18+ , README.md
18−cabal-version: 1.22
19+cabal-version: 2.0
19−tested-with: GHC == 8.10.7
20+tested-with: GHC == 8.6.5
21+ , GHC == 8.10.7
20− , GHC == 9.0.2
22+ , GHC == 9.0.2
23+ , GHC == 9.2.4
24+ , GHC == 9.4.3
25+ , GHC == 9.8.1
21
26
22source-repository head
27source-repository head
23 type: git
28 type: git
@@ -26,7 +31,7 @@ source-repository head
26library
31library
27 exposed-modules: Test.QuickCheck.Arbitrary.Generic
32 exposed-modules: Test.QuickCheck.Arbitrary.Generic
28 build-depends: base >=4.8 && <5
33 build-depends: base >=4.8 && <5
29− , QuickCheck
34+ , QuickCheck >=2.8
30 hs-source-dirs: src
35 hs-source-dirs: src
31 default-language: Haskell2010
36 default-language: Haskell2010
32 default-extensions: AllowAmbiguousTypes
37 default-extensions: AllowAmbiguousTypes
@@ -54,15 +59,16 @@ test-suite test
54 hs-source-dirs: test
59 hs-source-dirs: test
55 main-is: Test.hs
60 main-is: Test.hs
56 default-language: Haskell2010
61 default-language: Haskell2010
57− build-depends: base >= 4.8 && <5
62+ build-depends: base >=4.12 && <5
58− , QuickCheck
63+ , QuickCheck >=2.10
59 , deepseq
64 , deepseq
60 , generic-arbitrary
65 , generic-arbitrary
61− , tasty
66+ , tasty >=1.4.2 || <1.4.0.1
62− , tasty-discover
67+ , tasty-discover >= 2.0.0
63− , tasty-hunit
68+ , tasty-hunit >= 0.9.2
64 , tasty-quickcheck
69 , tasty-quickcheck
65− other-modules: Aux
70+ other-modules: Auxiliary
71+ , EnumTest
66 , LimitationDemo
72 , LimitationDemo
67 , NoTypecheckTest
73 , NoTypecheckTest
68 , ParametersTest
74 , ParametersTest
@@ -88,9 +94,8 @@ test-suite test
88 , TypeSynonymInstances
94 , TypeSynonymInstances
89 , UndecidableInstances
95 , UndecidableInstances
90 , ViewPatterns
96 , ViewPatterns
91− build-tools: tasty-discover
97+ build-tool-depends: tasty-discover:tasty-discover
92 ghc-options: -Wall
98 ghc-options: -Wall
93 -threaded
99 -threaded
94 -rtsopts
100 -rtsopts
95 "-with-rtsopts=-N -A64m -qb0 -n4m -T -I1"
101 "-with-rtsopts=-N -A64m -qb0 -n4m -T -I1"
96− default-extensions: DeriveGeneric
lts-18.18.yaml → ghc-8.10.7.yamlrenamed

The content is the same.

lts-18.18.yaml.lock → ghc-8.10.7.yaml.lockrenamed

The content is the same.

lts-13.21.yaml → ghc-8.6.5.yamlrenamed

The content is the same.

lts-13.21.yaml.lock → ghc-8.6.5.yaml.lockrenamed

The content is the same.

ghc-9.0.2.yamlnew file+1
@@ -0,0 +1 @@
1+resolver: lts-19.20
ghc-9.0.2.yaml.locknew file+12
@@ -0,0 +1,12 @@
1+# This file was autogenerated by Stack.
2+# You should not edit this file by hand.
3+# For more information, please see the documentation at:
4+# https://docs.haskellstack.org/en/stable/lock_files
5+
6+packages: []
7+snapshots:
8+- completed:
9+ sha256: be747117bed6d462806c883352c3206325b23480825103f5c87884e97e52819a
10+ size: 619173
11+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/20.yaml
12+ original: lts-19.20
ghc-9.2.4.yamlnew file+1
@@ -0,0 +1 @@
1+resolver: nightly-2022-08-24
ghc-9.2.4.yaml.locknew file+12
@@ -0,0 +1,12 @@
1+# This file was autogenerated by Stack.
2+# You should not edit this file by hand.
3+# For more information, please see the documentation at:
4+# https://docs.haskellstack.org/en/stable/lock_files
5+
6+packages: []
7+snapshots:
8+- completed:
9+ sha256: ff431937a638ebfaa5e6fec13c7ae575f01e02744d6ca5e5b1554f78cb5f88ad
10+ size: 631953
11+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/8/24.yaml
12+ original: nightly-2022-08-24
ghc-9.4.3.yamlnew file+1
@@ -0,0 +1 @@
1+resolver: nightly-2022-12-26
ghc-9.4.3.yaml.locknew file+12
@@ -0,0 +1,12 @@
1+# This file was autogenerated by Stack.
2+# You should not edit this file by hand.
3+# For more information, please see the documentation at:
4+# https://docs.haskellstack.org/en/stable/lock_files
5+
6+packages: []
7+snapshots:
8+- completed:
9+ sha256: bbe432b2abd6d866aa37f65a8129a5f858b7c6eaae9464f8bc2814ce92ac2d15
10+ size: 573163
11+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/12/26.yaml
12+ original: nightly-2022-12-26
ghc-9.8.1.yamlnew file+1
@@ -0,0 +1 @@
1+resolver: nightly-2024-01-12
ghc-9.8.1.yaml.locknew file+12
@@ -0,0 +1,12 @@
1+# This file was autogenerated by Stack.
2+# You should not edit this file by hand.
3+# For more information, please see the documentation at:
4+# https://docs.haskellstack.org/en/stable/lock_files
5+
6+packages: []
7+snapshots:
8+- completed:
9+ sha256: 8f06e87750f95bc8620644ea22344ad023c3c5aa6efa854747aa70093898fd79
10+ size: 556465
11+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2024/1/12.yaml
12+ original: nightly-2024-01-12
src/Test/QuickCheck/Arbitrary/Generic.hs+11−3
@@ -1,3 +1,10 @@
1+#if __GLASGOW_HASKELL__ >= 806
2+{-# OPTIONS_GHC -Wno-star-is-type #-}
3+#endif
4+#if __GLASGOW_HASKELL__ >= 800
5+{-# OPTIONS_GHC -Wno-unticked-promoted-constructors #-}
6+#endif
7+
1{-|
8{-|
2
9
3This module is a generic implementation of the 'arbitrary' method. Example
10This module is a generic implementation of the 'arbitrary' method. Example
@@ -27,7 +34,7 @@ data Foo = Foo
27The generated 'arbitrary' method is equivalent to
34The generated 'arbitrary' method is equivalent to
28
35
29@
36@
30−Foo <$> arbitrary <*> arbitrary
37+Foo '<$>' arbitrary '<*>' arbitrary
31@.
38@.
32
39
33It can also handle a recursive types problem. Assuming a type
40It can also handle a recursive types problem. Assuming a type
@@ -127,7 +134,6 @@ Now everything compiles and works as expected.
127module Test.QuickCheck.Arbitrary.Generic
134module Test.QuickCheck.Arbitrary.Generic
128 ( -- * Main
135 ( -- * Main
129 genericArbitrary
136 genericArbitrary
130− , genericShrink
131#if MIN_VERSION_QuickCheck(2, 14, 0)
137#if MIN_VERSION_QuickCheck(2, 14, 0)
132 , GenericArbitrary(..)
138 , GenericArbitrary(..)
133#endif
139#endif
@@ -143,16 +149,18 @@ module Test.QuickCheck.Arbitrary.Generic
143 , SumLen
149 , SumLen
144 -- * Reexports
150 -- * Reexports
145 , Arbitrary(..)
151 , Arbitrary(..)
152+ , genericShrink
146 ) where
153 ) where
147
154
148import Control.Applicative
155import Control.Applicative
149−import Data.Coerce (coerce)
150import Data.Proxy
156import Data.Proxy
151import Data.Type.Bool
157import Data.Type.Bool
152import GHC.Generics as G
158import GHC.Generics as G
153import GHC.TypeLits
159import GHC.TypeLits
160+import Prelude
154import Test.QuickCheck as QC
161import Test.QuickCheck as QC
155#if MIN_VERSION_QuickCheck(2, 14, 0)
162#if MIN_VERSION_QuickCheck(2, 14, 0)
163+import Data.Coerce (coerce)
156import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
164import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
157
165
158
166
test/Aux.hs → test/Auxiliary.hsrenamed+1−1
@@ -1,4 +1,4 @@
1−module Aux where
1+module Auxiliary where
2
2
3import Control.Exception
3import Control.Exception
4import Test.QuickCheck
4import Test.QuickCheck
test/EnumTest.hsnew file+24
@@ -0,0 +1,24 @@
1+#if __GLASGOW_HASKELL__ >= 806 && __GLASGOW_HASKELL__ <= 900
2+{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-}
3+#elif __GLASGOW_HASKELL__ >= 902
4+{-# OPTIONS_GHC -fconstraint-solver-iterations=6 #-}
5+#endif
6+
7+
8+
9+module EnumTest where
10+
11+import Control.DeepSeq
12+import GHC.Generics
13+import Test.QuickCheck
14+import Test.QuickCheck.Arbitrary.Generic
15+
16+data Country = PL | GB | RU | RO | CZ | HR | SK | DE | NL | ES | BR
17+ deriving (Generic, NFData, Show)
18+
19+instance Arbitrary Country where
20+ arbitrary = genericArbitrary
21+ shrink = genericShrink
22+
23+prop_CountryTest :: Country -> Property
24+prop_CountryTest = total
test/NoTypecheckTest.hs+1−1
@@ -5,7 +5,7 @@
5
5
6module NoTypecheckTest where
6module NoTypecheckTest where
7
7
8−import Aux
8+import Auxiliary
9import GHC.Generics (Generic)
9import GHC.Generics (Generic)
10import Test.QuickCheck
10import Test.QuickCheck
11import Test.QuickCheck.Arbitrary.Generic
11import Test.QuickCheck.Arbitrary.Generic
test/ParametersTest.hs+1−1
@@ -3,7 +3,7 @@
3
3
4module ParametersTest where
4module ParametersTest where
5
5
6−import Aux
6+import Auxiliary
7import Control.DeepSeq
7import Control.DeepSeq
8import GHC.Generics (Generic)
8import GHC.Generics (Generic)
9import Test.QuickCheck
9import Test.QuickCheck
test/RecursiveTest.hs+2−1
@@ -1,13 +1,14 @@
1{-# LANGUAGE DerivingStrategies #-}
1{-# LANGUAGE DerivingStrategies #-}
2{-# LANGUAGE DerivingVia #-}
2{-# LANGUAGE DerivingVia #-}
3{-# LANGUAGE DeriveAnyClass #-}
3{-# LANGUAGE DeriveAnyClass #-}
4+{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-} -- GHC-9.2.4
4
5
5-- | Testing that our Arbitrary instances do not get stuck and respect the
6-- | Testing that our Arbitrary instances do not get stuck and respect the
6-- `size` parameter while generating.
7-- `size` parameter while generating.
7
8
8module RecursiveTest where
9module RecursiveTest where
9
10
10−import Control.DeepSeq
11+import Control.DeepSeq (NFData)
11import GHC.Generics (Generic)
12import GHC.Generics (Generic)
12import Test.QuickCheck
13import Test.QuickCheck
13import Test.QuickCheck.Arbitrary.Generic
14import Test.QuickCheck.Arbitrary.Generic