packages feed

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 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)++