diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+0.2.2
+-----
+
+* Resolved an issue where the size of the generators could become negative
+
 0.2.1
 -----
 
diff --git a/generic-arbitrary.cabal b/generic-arbitrary.cabal
--- a/generic-arbitrary.cabal
+++ b/generic-arbitrary.cabal
@@ -1,5 +1,5 @@
 name:                generic-arbitrary
-version:             0.2.1
+version:             0.2.2
 synopsis:            Generic implementation for QuickCheck's Arbitrary
 description:
     Generic implementations of methods of the 'Arbitrary' class from the
diff --git a/src/Test/QuickCheck/Arbitrary/Generic.hs b/src/Test/QuickCheck/Arbitrary/Generic.hs
--- a/src/Test/QuickCheck/Arbitrary/Generic.hs
+++ b/src/Test/QuickCheck/Arbitrary/Generic.hs
@@ -65,7 +65,10 @@
   gArbitrary = pure G.U1
 
 instance Arbitrary c => GArbitrary (G.K1 i c) where
-  gArbitrary = G.K1 <$> arbitrary
+  gArbitrary = G.K1 <$> scale predNat arbitrary
+    where
+      predNat 0 = 0
+      predNat n = pred n
 
 instance GArbitrary f => GArbitrary (G.M1 i c f) where
   gArbitrary = G.M1 <$> gArbitrary
@@ -82,8 +85,8 @@
 instance (GArbitrary a, GArbitrary b, KnownNat (SumLen a), KnownNat (SumLen b)
          ) => GArbitrary (a G.:+: b) where
   gArbitrary = frequency
-    [ (lfreq, G.L1 <$> QC.scale pred gArbitrary)
-    , (rfreq, G.R1 <$> QC.scale pred gArbitrary) ]
+    [ (lfreq, G.L1 <$> gArbitrary)
+    , (rfreq, G.R1 <$> gArbitrary) ]
     where
       lfreq = fromIntegral $ natVal (Proxy :: Proxy (SumLen a))
       rfreq = fromIntegral $ natVal (Proxy :: Proxy (SumLen b))
