anonymous-sums-tests (empty) → 0.4.0.0
raw patch · 6 files changed
+877/−0 lines, 6 filesdep +QuickCheckdep +anonymous-sumsdep +basesetup-changed
Dependencies added: QuickCheck, anonymous-sums, base
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- anonymous-sums-tests.cabal +31/−0
- lib/Data/Sums/Coarbitrary.hs +338/−0
- lib/Data/Sums/Generators.hs +239/−0
- lib/Data/Sums/Shrinkers.hs +237/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2014, Omari Norman++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Omari Norman nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ anonymous-sums-tests.cabal view
@@ -0,0 +1,31 @@+name: anonymous-sums-tests+version: 0.4.0.0+synopsis: QuickCheck functions to accompany the anonymous-sums package+description:+ Contains generators, coarbitrary functions, and shrinkers to+ accompany the anonymous-sums package.+homepage: http://www.github.com/massysett/anonymous-sums+license: BSD3+license-file: LICENSE+author: Omari Norman+maintainer: omari@smileystation.com+category: Data+build-type: Simple+cabal-version: >=1.10+source-repository head+ type: git+ location: https://github.com/massysett/anonymous-sums.git++library+ hs-source-dirs: lib+ exposed-modules:+ Data.Sums.Generators+ , Data.Sums.Shrinkers+ , Data.Sums.Coarbitrary+ build-depends:+ base >= 4.5.0.0 && < 5+ , anonymous-sums ==0.4.0.0+ , QuickCheck >= 2.7+ default-language: Haskell2010+ ghc-options: -Wall+
+ lib/Data/Sums/Coarbitrary.hs view
@@ -0,0 +1,338 @@+-- Do not warn about the defaulting of variant function+{-# OPTIONS_GHC -fno-warn-type-defaults #-}+module Data.Sums.Coarbitrary where++import Data.Sums+import Test.QuickCheck++s0 :: S0 -> Gen b -> Gen b+s0 _ = variant 0++s1+ :: (a -> Gen r -> Gen r)+ -> S1 a+ -> Gen r+ -> Gen r+s1 fa = caseS1 (\a -> variant 0 . fa a)++s2+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> S2 a b+ -> Gen r+ -> Gen r+s2 fa fb = caseS2 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)++s3+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> S3 a b c+ -> Gen r+ -> Gen r+s3 fa fb fc+ = caseS3 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)++s4+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> S4 a b c d+ -> Gen r+ -> Gen r+s4 fa fb fc fd+ = caseS4 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)++s5+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> S5 a b c d e+ -> Gen r+ -> Gen r+s5 fa fb fc fd fe+ = caseS5 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)++s6+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> S6 a b c d e f+ -> Gen r+ -> Gen r+s6 fa fb fc fd fe ff+ = caseS6 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)++s7+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> S7 a b c d e f g+ -> Gen r+ -> Gen r+s7 fa fb fc fd fe ff fg+ = caseS7 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)++s8+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> S8 a b c d e f g h+ -> Gen r+ -> Gen r+s8 fa fb fc fd fe ff fg fh+ = caseS8 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)++s9+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> S9 a b c d e f g h i+ -> Gen r+ -> Gen r+s9 fa fb fc fd fe ff fg fh fi+ = caseS9 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)++s10+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> (j -> Gen r -> Gen r)+ -> S10 a b c d e f g h i j+ -> Gen r+ -> Gen r+s10 fa fb fc fd fe ff fg fh fi fj+ = caseS10 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)+ (\j -> variant 9 . fj j)++s11+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> (j -> Gen r -> Gen r)+ -> (k -> Gen r -> Gen r)+ -> S11 a b c d e f g h i j k+ -> Gen r+ -> Gen r+s11 fa fb fc fd fe ff fg fh fi fj fk+ = caseS11 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)+ (\j -> variant 9 . fj j)+ (\k -> variant 10 . fk k)++s12+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> (j -> Gen r -> Gen r)+ -> (k -> Gen r -> Gen r)+ -> (l -> Gen r -> Gen r)+ -> S12 a b c d e f g h i j k l+ -> Gen r+ -> Gen r+s12 fa fb fc fd fe ff fg fh fi fj fk fl+ = caseS12 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)+ (\j -> variant 9 . fj j)+ (\k -> variant 10 . fk k)+ (\l -> variant 11 . fl l)++s13+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> (j -> Gen r -> Gen r)+ -> (k -> Gen r -> Gen r)+ -> (l -> Gen r -> Gen r)+ -> (m -> Gen r -> Gen r)+ -> S13 a b c d e f g h i j k l m+ -> Gen r+ -> Gen r+s13 fa fb fc fd fe ff fg fh fi fj fk fl fm+ = caseS13 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)+ (\j -> variant 9 . fj j)+ (\k -> variant 10 . fk k)+ (\l -> variant 11 . fl l)+ (\m -> variant 12 . fm m)++s14+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> (j -> Gen r -> Gen r)+ -> (k -> Gen r -> Gen r)+ -> (l -> Gen r -> Gen r)+ -> (m -> Gen r -> Gen r)+ -> (n -> Gen r -> Gen r)+ -> S14 a b c d e f g h i j k l m n+ -> Gen r+ -> Gen r+s14 fa fb fc fd fe ff fg fh fi fj fk fl fm fn+ = caseS14 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)+ (\j -> variant 9 . fj j)+ (\k -> variant 10 . fk k)+ (\l -> variant 11 . fl l)+ (\m -> variant 12 . fm m)+ (\n -> variant 12 . fn n)++s15+ :: (a -> Gen r -> Gen r)+ -> (b -> Gen r -> Gen r)+ -> (c -> Gen r -> Gen r)+ -> (d -> Gen r -> Gen r)+ -> (e -> Gen r -> Gen r)+ -> (f -> Gen r -> Gen r)+ -> (g -> Gen r -> Gen r)+ -> (h -> Gen r -> Gen r)+ -> (i -> Gen r -> Gen r)+ -> (j -> Gen r -> Gen r)+ -> (k -> Gen r -> Gen r)+ -> (l -> Gen r -> Gen r)+ -> (m -> Gen r -> Gen r)+ -> (n -> Gen r -> Gen r)+ -> (o -> Gen r -> Gen r)+ -> S15 a b c d e f g h i j k l m n o+ -> Gen r+ -> Gen r+s15 fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo+ = caseS15 (\a -> variant 0 . fa a)+ (\b -> variant 1 . fb b)+ (\c -> variant 2 . fc c)+ (\d -> variant 3 . fd d)+ (\e -> variant 4 . fe e)+ (\f -> variant 5 . ff f)+ (\g -> variant 6 . fg g)+ (\h -> variant 7 . fh h)+ (\i -> variant 8 . fi i)+ (\j -> variant 9 . fj j)+ (\k -> variant 10 . fk k)+ (\l -> variant 11 . fl l)+ (\m -> variant 12 . fm m)+ (\n -> variant 12 . fn n)+ (\o -> variant 12 . fo o)+
+ lib/Data/Sums/Generators.hs view
@@ -0,0 +1,239 @@+-- | Each of the function in this module takes one pair for each type+-- in the sum. The first element of the pair is an 'Int' indicating+-- the frequency with which constructors of this type are generated;+-- this 'Int' should be non-negative. The second element of the pair+-- is the generator used for elements of this type. For example, to+-- generate 'Int's about a fourth of the time and 'Char's about three+-- fourths of the time:+--+-- > genS2 :: Gen (S2 Int Char)+-- > genS2 = s2 (1, arbitrary) (3, arbitrary)+module Data.Sums.Generators where++import Data.Sums+import Test.QuickCheck++s2+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> Gen (S2 a b)+s2 (fa, ga) (fb, gb) = frequency [(fa, fmap S2a ga), (fb, fmap S2b gb)]++s3+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> Gen (S3 a b c)+s3 (fa, ga) (fb, gb) (fc, gc)+ = frequency [(fa, fmap S3a ga), (fb, fmap S3b gb), (fc, fmap S3c gc)]++s4+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> Gen (S4 a b c d)+s4 (fa, ga) (fb, gb) (fc, gc) (fd, gd)+ = frequency [ (fa, fmap S4a ga), (fb, fmap S4b gb), (fc, fmap S4c gc)+ , (fd, fmap S4d gd) ]+s5+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> Gen (S5 a b c d e)+s5 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge)+ = frequency [ (fa, fmap S5a ga), (fb, fmap S5b gb), (fc, fmap S5c gc)+ , (fd, fmap S5d gd), (fe, fmap S5e ge) ]++s6+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> Gen (S6 a b c d e f)+s6 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf)+ = frequency [ (fa, fmap S6a ga), (fb, fmap S6b gb), (fc, fmap S6c gc)+ , (fd, fmap S6d gd), (fe, fmap S6e ge), (ff, fmap S6f gf) ]+++s7+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> Gen (S7 a b c d e f g)+s7 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg)+ = frequency [ (fa, fmap S7a ga), (fb, fmap S7b gb), (fc, fmap S7c gc)+ , (fd, fmap S7d gd), (fe, fmap S7e ge), (ff, fmap S7f gf)+ , (fg, fmap S7g gg) ]++s8+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> Gen (S8 a b c d e f g h)+s8 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ = frequency [ (fa, fmap S8a ga), (fb, fmap S8b gb), (fc, fmap S8c gc)+ , (fd, fmap S8d gd), (fe, fmap S8e ge), (ff, fmap S8f gf)+ , (fg, fmap S8g gg), (fh, fmap S8h gh) ]++s9+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> Gen (S9 a b c d e f g h i)+s9 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi)+ = frequency [ (fa, fmap S9a ga), (fb, fmap S9b gb), (fc, fmap S9c gc)+ , (fd, fmap S9d gd), (fe, fmap S9e ge), (ff, fmap S9f gf)+ , (fg, fmap S9g gg), (fh, fmap S9h gh), (fi, fmap S9i gi) ]++s10+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> (Int, Gen j)+ -> Gen (S10 a b c d e f g h i j)+s10 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi) (fj, gj)+ = frequency [ (fa, fmap S10a ga), (fb, fmap S10b gb), (fc, fmap S10c gc)+ , (fd, fmap S10d gd), (fe, fmap S10e ge), (ff, fmap S10f gf)+ , (fg, fmap S10g gg), (fh, fmap S10h gh), (fi, fmap S10i gi)+ , (fj, fmap S10j gj) ]+s11+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> (Int, Gen j)+ -> (Int, Gen k)+ -> Gen (S11 a b c d e f g h i j k)+s11 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi) (fj, gj) (fk, gk)+ = frequency [ (fa, fmap S11a ga), (fb, fmap S11b gb), (fc, fmap S11c gc)+ , (fd, fmap S11d gd), (fe, fmap S11e ge), (ff, fmap S11f gf)+ , (fg, fmap S11g gg), (fh, fmap S11h gh), (fi, fmap S11i gi)+ , (fj, fmap S11j gj), (fk, fmap S11k gk) ]++s12+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> (Int, Gen j)+ -> (Int, Gen k)+ -> (Int, Gen l)+ -> Gen (S12 a b c d e f g h i j k l)+s12 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi) (fj, gj) (fk, gk) (fl, gl)+ = frequency [ (fa, fmap S12a ga), (fb, fmap S12b gb), (fc, fmap S12c gc)+ , (fd, fmap S12d gd), (fe, fmap S12e ge), (ff, fmap S12f gf)+ , (fg, fmap S12g gg), (fh, fmap S12h gh), (fi, fmap S12i gi)+ , (fj, fmap S12j gj), (fk, fmap S12k gk), (fl, fmap S12l gl) ]++s13+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> (Int, Gen j)+ -> (Int, Gen k)+ -> (Int, Gen l)+ -> (Int, Gen m)+ -> Gen (S13 a b c d e f g h i j k l m)+s13 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi) (fj, gj) (fk, gk) (fl, gl) (fm, gm)+ = frequency [ (fa, fmap S13a ga), (fb, fmap S13b gb), (fc, fmap S13c gc)+ , (fd, fmap S13d gd), (fe, fmap S13e ge), (ff, fmap S13f gf)+ , (fg, fmap S13g gg), (fh, fmap S13h gh), (fi, fmap S13i gi)+ , (fj, fmap S13j gj), (fk, fmap S13k gk), (fl, fmap S13l gl)+ , (fm, fmap S13m gm) ]++s14+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> (Int, Gen j)+ -> (Int, Gen k)+ -> (Int, Gen l)+ -> (Int, Gen m)+ -> (Int, Gen n)+ -> Gen (S14 a b c d e f g h i j k l m n)+s14 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi) (fj, gj) (fk, gk) (fl, gl) (fm, gm) (fn, gn)+ = frequency [ (fa, fmap S14a ga), (fb, fmap S14b gb), (fc, fmap S14c gc)+ , (fd, fmap S14d gd), (fe, fmap S14e ge), (ff, fmap S14f gf)+ , (fg, fmap S14g gg), (fh, fmap S14h gh), (fi, fmap S14i gi)+ , (fj, fmap S14j gj), (fk, fmap S14k gk), (fl, fmap S14l gl)+ , (fm, fmap S14m gm), (fn, fmap S14n gn) ]++s15+ :: (Int, Gen a)+ -> (Int, Gen b)+ -> (Int, Gen c)+ -> (Int, Gen d)+ -> (Int, Gen e)+ -> (Int, Gen f)+ -> (Int, Gen g)+ -> (Int, Gen h)+ -> (Int, Gen i)+ -> (Int, Gen j)+ -> (Int, Gen k)+ -> (Int, Gen l)+ -> (Int, Gen m)+ -> (Int, Gen n)+ -> (Int, Gen o)+ -> Gen (S15 a b c d e f g h i j k l m n o)+s15 (fa, ga) (fb, gb) (fc, gc) (fd, gd) (fe, ge) (ff, gf) (fg, gg) (fh, gh)+ (fi, gi) (fj, gj) (fk, gk) (fl, gl) (fm, gm) (fn, gn) (fo, go)+ = frequency [ (fa, fmap S15a ga), (fb, fmap S15b gb), (fc, fmap S15c gc)+ , (fd, fmap S15d gd), (fe, fmap S15e ge), (ff, fmap S15f gf)+ , (fg, fmap S15g gg), (fh, fmap S15h gh), (fi, fmap S15i gi)+ , (fj, fmap S15j gj), (fk, fmap S15k gk), (fl, fmap S15l gl)+ , (fm, fmap S15m gm), (fn, fmap S15n gn), (fo, fmap S15o go) ]+
+ lib/Data/Sums/Shrinkers.hs view
@@ -0,0 +1,237 @@+module Data.Sums.Shrinkers where++import Data.Sums++s0 :: S0 -> [S0]+s0 _ = []++s1 :: (a -> [a]) -> S1 a -> [S1 a]+s1 f (S1a a) = map S1a $ f a++s2 :: (a -> [a]) -> (b -> [b]) -> S2 a b -> [S2 a b]+s2 fa fb = caseS2 (map S2a . fa) (map S2b . fb)++s3+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> S3 a b c+ -> [S3 a b c]+s3 fa fb fc = caseS3 (map S3a . fa) (map S3b . fb) (map S3c. fc)++s4+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> S4 a b c d+ -> [S4 a b c d]+s4 fa fb fc fd = caseS4 (map S4a . fa) (map S4b . fb) (map S4c . fc)+ (map S4d . fd)++s5+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> S5 a b c d e+ -> [S5 a b c d e]+s5 fa fb fc fd fe = caseS5 (map S5a . fa) (map S5b . fb) (map S5c . fc)+ (map S5d . fd) (map S5e . fe)++s6+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> S6 a b c d e f+ -> [S6 a b c d e f]+s6 fa fb fc fd fe ff+ = caseS6 (map S6a . fa) (map S6b . fb) (map S6c . fc)+ (map S6d . fd) (map S6e . fe) (map S6f . ff)++s7+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> S7 a b c d e f g+ -> [S7 a b c d e f g]+s7 fa fb fc fd fe ff fg+ = caseS7 (map S7a . fa) (map S7b . fb) (map S7c . fc)+ (map S7d . fd) (map S7e . fe) (map S7f . ff) (map S7g . fg)++s8+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> S8 a b c d e f g h+ -> [S8 a b c d e f g h]+s8 fa fb fc fd fe ff fg fh+ = caseS8 (map S8a . fa) (map S8b . fb) (map S8c . fc)+ (map S8d . fd) (map S8e . fe) (map S8f . ff) (map S8g . fg)+ (map S8h . fh)+++s9+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> S9 a b c d e f g h i+ -> [S9 a b c d e f g h i]+s9 fa fb fc fd fe ff fg fh fi+ = caseS9 (map S9a . fa) (map S9b . fb) (map S9c . fc)+ (map S9d . fd) (map S9e . fe) (map S9f . ff) (map S9g . fg)+ (map S9h . fh) (map S9i . fi)+++s10+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> (j -> [j])+ -> S10 a b c d e f g h i j+ -> [S10 a b c d e f g h i j]+s10 fa fb fc fd fe ff fg fh fi fj+ = caseS10 (map S10a . fa) (map S10b . fb) (map S10c . fc)+ (map S10d . fd) (map S10e . fe) (map S10f . ff) (map S10g . fg)+ (map S10h . fh) (map S10i . fi) (map S10j . fj)+++s11+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> (j -> [j])+ -> (k -> [k])+ -> S11 a b c d e f g h i j k+ -> [S11 a b c d e f g h i j k]+s11 fa fb fc fd fe ff fg fh fi fj fk+ = caseS11 (map S11a . fa) (map S11b . fb) (map S11c . fc)+ (map S11d . fd) (map S11e . fe) (map S11f . ff) (map S11g . fg)+ (map S11h . fh) (map S11i . fi) (map S11j . fj) (map S11k . fk)+++s12+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> (j -> [j])+ -> (k -> [k])+ -> (l -> [l])+ -> S12 a b c d e f g h i j k l+ -> [S12 a b c d e f g h i j k l]+s12 fa fb fc fd fe ff fg fh fi fj fk fl+ = caseS12 (map S12a . fa) (map S12b . fb) (map S12c . fc)+ (map S12d . fd) (map S12e . fe) (map S12f . ff) (map S12g . fg)+ (map S12h . fh) (map S12i . fi) (map S12j . fj) (map S12k . fk)+ (map S12l . fl)+++s13+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> (j -> [j])+ -> (k -> [k])+ -> (l -> [l])+ -> (m -> [m])+ -> S13 a b c d e f g h i j k l m+ -> [S13 a b c d e f g h i j k l m]+s13 fa fb fc fd fe ff fg fh fi fj fk fl fm+ = caseS13 (map S13a . fa) (map S13b . fb) (map S13c . fc)+ (map S13d . fd) (map S13e . fe) (map S13f . ff) (map S13g . fg)+ (map S13h . fh) (map S13i . fi) (map S13j . fj) (map S13k . fk)+ (map S13l . fl) (map S13m . fm)+++s14+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> (j -> [j])+ -> (k -> [k])+ -> (l -> [l])+ -> (m -> [m])+ -> (n -> [n])+ -> S14 a b c d e f g h i j k l m n+ -> [S14 a b c d e f g h i j k l m n]+s14 fa fb fc fd fe ff fg fh fi fj fk fl fm fn+ = caseS14 (map S14a . fa) (map S14b . fb) (map S14c . fc)+ (map S14d . fd) (map S14e . fe) (map S14f . ff) (map S14g . fg)+ (map S14h . fh) (map S14i . fi) (map S14j . fj) (map S14k . fk)+ (map S14l . fl) (map S14m . fm) (map S14n . fn)+++s15+ :: (a -> [a])+ -> (b -> [b])+ -> (c -> [c])+ -> (d -> [d])+ -> (e -> [e])+ -> (f -> [f])+ -> (g -> [g])+ -> (h -> [h])+ -> (i -> [i])+ -> (j -> [j])+ -> (k -> [k])+ -> (l -> [l])+ -> (m -> [m])+ -> (n -> [n])+ -> (o -> [o])+ -> S15 a b c d e f g h i j k l m n o+ -> [S15 a b c d e f g h i j k l m n o]+s15 fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo+ = caseS15 (map S15a . fa) (map S15b . fb) (map S15c . fc)+ (map S15d . fd) (map S15e . fe) (map S15f . ff) (map S15g . fg)+ (map S15h . fh) (map S15i . fi) (map S15j . fj) (map S15k . fk)+ (map S15l . fl) (map S15m . fm) (map S15n . fn) (map S15o . fo)++