git.iko.soy/typeable/generic-arbitrary
on fff49dc help sign in
22 files changed+42−164
since splitsnapshots
unifiedsplit
.github/workflows/haskell-ci.yml+4−17 CHANGELOG.md−16 README.md+18−21 generic-arbitrary.cabal+13−18 ghc-9.0.2.yaml−1 ghc-9.0.2.yaml.lock−12 ghc-9.2.4.yaml−1 ghc-9.2.4.yaml.lock−12 ghc-9.4.3.yaml−1 ghc-9.4.3.yaml.lock−12 ghc-9.8.1.yaml−1 ghc-9.8.1.yaml.lock−12 ghc-8.6.5.yaml → lts-13.21.yaml ghc-8.6.5.yaml.lock → lts-13.21.yaml.lock ghc-8.10.7.yaml → lts-18.18.yaml ghc-8.10.7.yaml.lock → lts-18.18.yaml.lock src/Test/QuickCheck/Arbitrary/Generic.hs+3−11 test/Auxiliary.hs → test/Aux.hs+1−1 test/EnumTest.hs−24 test/NoTypecheckTest.hs+1−1 test/ParametersTest.hs+1−1 test/RecursiveTest.hs+1−2
.github/workflows/haskell-ci.yml+4−17
@@ -1,29 +1,16 @@
11name: Haskell-CI
2−on: [push, pull_request]
2+on: [push]
33jobs:
44 linux:
5− name: GHC-${{ matrix.ghc-version }}
5+ name: ${{ matrix.stack-yaml }}
66 runs-on: ubuntu-latest
77 strategy:
88 matrix:
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
9+ stack-yaml: [stack.yaml, lts-18.18.yaml, lts-13.21.yaml]
1610 steps:
1711 - uses: actions/checkout@v3
1812 - uses: haskell/actions/setup@v2
1913 with:
2014 enable-stack: true
21− ghc-version: ${{ matrix.ghc-version }}
2215 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−
1711.0.0
182-----
193
README.md+18−21
@@ -1,6 +1,6 @@
11# generic-arbitrary
22
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)
44
55# What?
66
@@ -93,7 +93,7 @@ there is a problem with mutually recursive types.
9393
9494# Type parameters
9595
96−Now let's see an example of datatype with parameters
96+Now lets see an example of datatype with parameters
9797
9898``` haskell
9999data A a = A a
@@ -108,28 +108,25 @@ instance (Arbitrary a) => Arbitrary (A a) where
108108
109109It should work from first glance, but when compile it will throw an error:
110110
111−```
112−• Could not deduce (Test.QuickCheck.Arbitrary.Generic.GArbitrary
113− (A a)
114− (GHC.Generics.D1
115− ('GHC.Generics.MetaData "A" "ParametersTest" "main" 'False)
116− (GHC.Generics.C1
117− ('GHC.Generics.MetaCons "A" 'GHC.Generics.PrefixI 'False)
118− (GHC.Generics.S1
119− ('GHC.Generics.MetaSel
120− 'Nothing
121− 'GHC.Generics.NoSourceUnpackedness
122− 'GHC.Generics.NoSourceStrictness
123− 'GHC.Generics.DecidedLazy)
124− (GHC.Generics.Rec0 a))))
125− (TypesDiffer (A a) a))
126− arising from a use of ‘genericArbitrary’
127−```
111+> • Could not deduce (Test.QuickCheck.Arbitrary.Generic.GArbitrary
112+> (A a)
113+> (GHC.Generics.D1
114+> ('GHC.Generics.MetaData "A" "ParametersTest" "main" 'False)
115+> (GHC.Generics.C1
116+> ('GHC.Generics.MetaCons "A" 'GHC.Generics.PrefixI 'False)
117+> (GHC.Generics.S1
118+> ('GHC.Generics.MetaSel
119+> 'Nothing
120+> 'GHC.Generics.NoSourceUnpackedness
121+> 'GHC.Generics.NoSourceStrictness
122+> 'GHC.Generics.DecidedLazy)
123+> (GHC.Generics.Rec0 a))))
124+> (TypesDiffer (A a) a))
125+> arising from a use of ‘genericArbitrary’
128126
129127Here the `TypesDiffer` is a type familty dealing with recursive types and
130128helping 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
132−constraint `Arg (A a) a`
129+`a` parameter is not an `A a` we must fix the instance with additional constraint
133130
134131``` haskell
135132instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
generic-arbitrary.cabal+13−18
@@ -1,5 +1,5 @@
11name: generic-arbitrary
2−version: 1.0.1.2
2+version: 1.0.0
33synopsis: Generic implementation for QuickCheck's Arbitrary
44description:
55 Generic implementations of methods of the 'Arbitrary' class from the
@@ -15,14 +15,9 @@ homepage: http://github.com/typeable/generic-arbitrary#readme
1515category: Generic
1616build-type: Simple
1717extra-source-files: CHANGELOG.md
18− , README.md
19−cabal-version: 2.0
20−tested-with: GHC == 8.6.5
21− , GHC == 8.10.7
22− , GHC == 9.0.2
23− , GHC == 9.2.4
24− , GHC == 9.4.3
25− , GHC == 9.8.1
18+cabal-version: 1.22
19+tested-with: GHC == 8.10.7
20+ , GHC == 9.0.2
2621
2722source-repository head
2823 type: git
@@ -31,7 +26,7 @@ source-repository head
3126library
3227 exposed-modules: Test.QuickCheck.Arbitrary.Generic
3328 build-depends: base >=4.8 && <5
34− , QuickCheck >=2.8
29+ , QuickCheck
3530 hs-source-dirs: src
3631 default-language: Haskell2010
3732 default-extensions: AllowAmbiguousTypes
@@ -59,16 +54,15 @@ test-suite test
5954 hs-source-dirs: test
6055 main-is: Test.hs
6156 default-language: Haskell2010
62− build-depends: base >=4.12 && <5
63− , QuickCheck >=2.10
57+ build-depends: base >= 4.8 && <5
58+ , QuickCheck
6459 , deepseq
6560 , generic-arbitrary
66− , tasty >=1.4.2 || <1.4.0.1
67− , tasty-discover >= 2.0.0
68− , tasty-hunit >= 0.9.2
61+ , tasty
62+ , tasty-discover
63+ , tasty-hunit
6964 , tasty-quickcheck
70− other-modules: Auxiliary
71− , EnumTest
65+ other-modules: Aux
7266 , LimitationDemo
7367 , NoTypecheckTest
7468 , ParametersTest
@@ -94,8 +88,9 @@ test-suite test
9488 , TypeSynonymInstances
9589 , UndecidableInstances
9690 , ViewPatterns
97− build-tool-depends: tasty-discover:tasty-discover
91+ build-tools: tasty-discover
9892 ghc-options: -Wall
9993 -threaded
10094 -rtsopts
10195 "-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−
81{-|
92
103This module is a generic implementation of the 'arbitrary' method. Example
@@ -34,7 +27,7 @@ data Foo = Foo
3427The generated 'arbitrary' method is equivalent to
3528
3629@
37−Foo '<$>' arbitrary '<*>' arbitrary
30+Foo <$> arbitrary <*> arbitrary
3831@.
3932
4033It can also handle a recursive types problem. Assuming a type
@@ -134,6 +127,7 @@ Now everything compiles and works as expected.
134127module Test.QuickCheck.Arbitrary.Generic
135128 ( -- * Main
136129 genericArbitrary
130+ , genericShrink
137131#if MIN_VERSION_QuickCheck(2, 14, 0)
138132 , GenericArbitrary(..)
139133#endif
@@ -149,18 +143,16 @@ module Test.QuickCheck.Arbitrary.Generic
149143 , SumLen
150144 -- * Reexports
151145 , Arbitrary(..)
152− , genericShrink
153146 ) where
154147
155148import Control.Applicative
149+import Data.Coerce (coerce)
156150import Data.Proxy
157151import Data.Type.Bool
158152import GHC.Generics as G
159153import GHC.TypeLits
160−import Prelude
161154import Test.QuickCheck as QC
162155#if MIN_VERSION_QuickCheck(2, 14, 0)
163−import Data.Coerce (coerce)
164156import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
165157
166158
test/Auxiliary.hs → test/Aux.hsrenamed+1−1
@@ -1,4 +1,4 @@
1−module Auxiliary where
1+module Aux where
22
33import Control.Exception
44import 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 @@
55
66module NoTypecheckTest where
77
8−import Auxiliary
8+import Aux
99import GHC.Generics (Generic)
1010import Test.QuickCheck
1111import Test.QuickCheck.Arbitrary.Generic
test/ParametersTest.hs+1−1
@@ -3,7 +3,7 @@
33
44module ParametersTest where
55
6−import Auxiliary
6+import Aux
77import Control.DeepSeq
88import GHC.Generics (Generic)
99import Test.QuickCheck
test/RecursiveTest.hs+1−2
@@ -1,14 +1,13 @@
11{-# LANGUAGE DerivingStrategies #-}
22{-# LANGUAGE DerivingVia #-}
33{-# LANGUAGE DeriveAnyClass #-}
4−{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-} -- GHC-9.2.4
54
65-- | Testing that our Arbitrary instances do not get stuck and respect the
76-- `size` parameter while generating.
87
98module RecursiveTest where
109
11−import Control.DeepSeq (NFData)
10+import Control.DeepSeq
1211import GHC.Generics (Generic)
1312import Test.QuickCheck
1413import Test.QuickCheck.Arbitrary.Generic