diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/anonymous-sums-tests.cabal b/anonymous-sums-tests.cabal
new file mode 100644
--- /dev/null
+++ b/anonymous-sums-tests.cabal
@@ -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
+
diff --git a/lib/Data/Sums/Coarbitrary.hs b/lib/Data/Sums/Coarbitrary.hs
new file mode 100644
--- /dev/null
+++ b/lib/Data/Sums/Coarbitrary.hs
@@ -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)
+
diff --git a/lib/Data/Sums/Generators.hs b/lib/Data/Sums/Generators.hs
new file mode 100644
--- /dev/null
+++ b/lib/Data/Sums/Generators.hs
@@ -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) ]
+
diff --git a/lib/Data/Sums/Shrinkers.hs b/lib/Data/Sums/Shrinkers.hs
new file mode 100644
--- /dev/null
+++ b/lib/Data/Sums/Shrinkers.hs
@@ -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)
+
+
