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

The content is the same.

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

The content is the same.

ghc-8.10.7.yaml → lts-18.18.yamlrenamed

The content is the same.

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

The content is the same.

src/Test/QuickCheck/Arbitrary/Generic.hs+3−11
@@ -1,10 +1,3 @@
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−
8{-|
1{-|
9
2
10This module is a generic implementation of the 'arbitrary' method. Example
3This module is a generic implementation of the 'arbitrary' method. Example
@@ -34,7 +27,7 @@ data Foo = Foo
34The generated 'arbitrary' method is equivalent to
27The generated 'arbitrary' method is equivalent to
35
28
36@
29@
37−Foo '<$>' arbitrary '<*>' arbitrary
30+Foo <$> arbitrary <*> arbitrary
38@.
31@.
39
32
40It can also handle a recursive types problem. Assuming a type
33It can also handle a recursive types problem. Assuming a type
@@ -134,6 +127,7 @@ Now everything compiles and works as expected.
134module Test.QuickCheck.Arbitrary.Generic
127module Test.QuickCheck.Arbitrary.Generic
135 ( -- * Main
128 ( -- * Main
136 genericArbitrary
129 genericArbitrary
130+ , genericShrink
137#if MIN_VERSION_QuickCheck(2, 14, 0)
131#if MIN_VERSION_QuickCheck(2, 14, 0)
138 , GenericArbitrary(..)
132 , GenericArbitrary(..)
139#endif
133#endif
@@ -149,18 +143,16 @@ module Test.QuickCheck.Arbitrary.Generic
149 , SumLen
143 , SumLen
150 -- * Reexports
144 -- * Reexports
151 , Arbitrary(..)
145 , Arbitrary(..)
152− , genericShrink
153 ) where
146 ) where
154
147
155import Control.Applicative
148import Control.Applicative
149+import Data.Coerce (coerce)
156import Data.Proxy
150import Data.Proxy
157import Data.Type.Bool
151import Data.Type.Bool
158import GHC.Generics as G
152import GHC.Generics as G
159import GHC.TypeLits
153import GHC.TypeLits
160−import Prelude
161import Test.QuickCheck as QC
154import Test.QuickCheck as QC
162#if MIN_VERSION_QuickCheck(2, 14, 0)
155#if MIN_VERSION_QuickCheck(2, 14, 0)
163−import Data.Coerce (coerce)
164import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
156import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
165
157
166
158
test/Auxiliary.hs → test/Aux.hsrenamed+1−1
@@ -1,4 +1,4 @@
1−module Auxiliary where
1+module Aux where
2
2
3import Control.Exception
3import Control.Exception
4import Test.QuickCheck
4import Test.QuickCheck
test/EnumTest.hsdeleted−24
@@ -1,24 +0,0 @@
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 Auxiliary
8+import Aux
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 Auxiliary
6+import Aux
7import Control.DeepSeq
7import Control.DeepSeq
8import GHC.Generics (Generic)
8import GHC.Generics (Generic)
9import Test.QuickCheck
9import Test.QuickCheck
test/RecursiveTest.hs+1−2
@@ -1,14 +1,13 @@
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
5
4
6-- | Testing that our Arbitrary instances do not get stuck and respect the
5-- | Testing that our Arbitrary instances do not get stuck and respect the
7-- `size` parameter while generating.
6-- `size` parameter while generating.
8
7
9module RecursiveTest where
8module RecursiveTest where
10
9
11−import Control.DeepSeq (NFData)
10+import Control.DeepSeq
12import GHC.Generics (Generic)
11import GHC.Generics (Generic)
13import Test.QuickCheck
12import Test.QuickCheck
14import Test.QuickCheck.Arbitrary.Generic
13import Test.QuickCheck.Arbitrary.Generic