diff --git a/Data/Profunctor/Product.hs b/Data/Profunctor/Product.hs
--- a/Data/Profunctor/Product.hs
+++ b/Data/Profunctor/Product.hs
@@ -2,6 +2,7 @@
 
 import Prelude hiding (id)
 import Data.Profunctor (Profunctor, dimap, lmap, WrappedArrow)
+import qualified Data.Profunctor as Profunctor
 import Data.Functor.Contravariant (Contravariant, contramap)
 -- vv TODO: don't want to have to import all those explicitly.  What to do?
 import Data.Profunctor.Product.Flatten
@@ -109,6 +110,29 @@
   empty = AndArrow (arr (const ()))
   (AndArrow f) ***! (AndArrow f') = AndArrow (f &&& f')
 
+-- { Sum
+
+class Profunctor p => SumProfunctor p where
+  -- Morally we should have 'zero :: p Void Void' but I don't think
+  -- that would actually be useful
+  (+++!) :: p a b -> p a' b' -> p (Either a a') (Either b b')
+
+instance SumProfunctor (->) where
+  f +++! g = either (Left . f) (Right . g)
+
+list :: (ProductProfunctor p, SumProfunctor p) => p a b -> p [a] [b]
+list p = Profunctor.dimap fromList toList (empty +++! (p ***! list p))
+  where toList :: Either () (a, [a]) -> [a]
+        toList = either (const []) (uncurry (:))
+        fromList :: [a] -> Either () (a, [a])
+        fromList []     = Left ()
+        fromList (a:as) = Right (a, as)
+
+-- SumContravariant would be 'Data.Functor.Contravariant.Decidable'
+-- (without the requirement to also be Divisible).
+
+-- }
+
 pT0 :: ProductProfunctor p => T0 -> p T0 T0
 pT0 = const empty
 
@@ -232,6 +256,71 @@
             (T18 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18)
 pT18 = chain pT17
 
+pT19 :: ProductProfunctor p => T19 (p a1 b1) (p a2 b2) (p a3 b3) (p a4 b4)
+                                   (p a5 b5) (p a6 b6) (p a7 b7) (p a8 b8)
+                                   (p a9 b9) (p a10 b10) (p a11 b11)
+                                   (p a12 b12) (p a13 b13) (p a14 b14)
+                                   (p a15 b15) (p a16 b16) (p a17 b17)
+                                   (p a18 b18) (p a19 b19)
+       -> p (T19 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19)
+            (T19 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19)
+pT19 = chain pT18
+
+pT20 :: ProductProfunctor p => T20 (p a1 b1) (p a2 b2) (p a3 b3) (p a4 b4)
+                                   (p a5 b5) (p a6 b6) (p a7 b7) (p a8 b8)
+                                   (p a9 b9) (p a10 b10) (p a11 b11)
+                                   (p a12 b12) (p a13 b13) (p a14 b14)
+                                   (p a15 b15) (p a16 b16) (p a17 b17)
+                                   (p a18 b18) (p a19 b19) (p a20 b20)
+       -> p (T20 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20)
+            (T20 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20)
+pT20 = chain pT19
+
+pT21 :: ProductProfunctor p => T21 (p a1 b1) (p a2 b2) (p a3 b3) (p a4 b4)
+                                   (p a5 b5) (p a6 b6) (p a7 b7) (p a8 b8)
+                                   (p a9 b9) (p a10 b10) (p a11 b11)
+                                   (p a12 b12) (p a13 b13) (p a14 b14)
+                                   (p a15 b15) (p a16 b16) (p a17 b17)
+                                   (p a18 b18) (p a19 b19) (p a20 b20)
+                                   (p a21 b21)
+       -> p (T21 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21)
+            (T21 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21)
+pT21 = chain pT20
+
+pT22 :: ProductProfunctor p => T22 (p a1 b1) (p a2 b2) (p a3 b3) (p a4 b4)
+                                   (p a5 b5) (p a6 b6) (p a7 b7) (p a8 b8)
+                                   (p a9 b9) (p a10 b10) (p a11 b11)
+                                   (p a12 b12) (p a13 b13) (p a14 b14)
+                                   (p a15 b15) (p a16 b16) (p a17 b17)
+                                   (p a18 b18) (p a19 b19) (p a20 b20)
+                                   (p a21 b21) (p a22 b22)
+       -> p (T22 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22)
+            (T22 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22)
+pT22 = chain pT21
+
+pT23 :: ProductProfunctor p => T23 (p a1 b1) (p a2 b2) (p a3 b3) (p a4 b4)
+                                   (p a5 b5) (p a6 b6) (p a7 b7) (p a8 b8)
+                                   (p a9 b9) (p a10 b10) (p a11 b11)
+                                   (p a12 b12) (p a13 b13) (p a14 b14)
+                                   (p a15 b15) (p a16 b16) (p a17 b17)
+                                   (p a18 b18) (p a19 b19) (p a20 b20)
+                                   (p a21 b21) (p a22 b22) (p a23 b23)
+       -> p (T23 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23)
+            (T23 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23)
+pT23 = chain pT22
+
+pT24 :: ProductProfunctor p => T24 (p a1 b1) (p a2 b2) (p a3 b3) (p a4 b4)
+                                   (p a5 b5) (p a6 b6) (p a7 b7) (p a8 b8)
+                                   (p a9 b9) (p a10 b10) (p a11 b11)
+                                   (p a12 b12) (p a13 b13) (p a14 b14)
+                                   (p a15 b15) (p a16 b16) (p a17 b17)
+                                   (p a18 b18) (p a19 b19) (p a20 b20)
+                                   (p a21 b21) (p a22 b22) (p a23 b23)
+                                   (p a24 b24)
+       -> p (T24 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24)
+            (T24 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24)
+pT24 = chain pT23
+
 convert :: Profunctor p => (a2 -> a1) -> (tp -> tTp) -> (b1 -> b2)
                            -> (tTp -> p a1 b1)
                            -> tp -> p a2 b2
@@ -350,3 +439,61 @@
       -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
            (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18)
 p18 = convert unflatten18 unflatten18 flatten18 pT18
+
+p19 :: ProductProfunctor p => (p a1 b1, p a2 b2, p a3 b3, p a4 b4,
+                              p a5 b5, p a6 b6, p a7 b7, p a8 b8,
+                              p a9 b9, p a10 b10, p a11 b11, p a12 b12,
+                              p a13 b13, p a14 b14, p a15 b15, p a16 b16,
+                              p a17 b17, p a18 b18, p a19 b19)
+      -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
+           (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19)
+p19 = convert unflatten19 unflatten19 flatten19 pT19
+
+p20 :: ProductProfunctor p => (p a1 b1, p a2 b2, p a3 b3, p a4 b4,
+                              p a5 b5, p a6 b6, p a7 b7, p a8 b8,
+                              p a9 b9, p a10 b10, p a11 b11, p a12 b12,
+                              p a13 b13, p a14 b14, p a15 b15, p a16 b16,
+                              p a17 b17, p a18 b18, p a19 b19, p a20 b20)
+      -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+           (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20)
+p20 = convert unflatten20 unflatten20 flatten20 pT20
+
+p21 :: ProductProfunctor p => (p a1 b1, p a2 b2, p a3 b3, p a4 b4,
+                              p a5 b5, p a6 b6, p a7 b7, p a8 b8,
+                              p a9 b9, p a10 b10, p a11 b11, p a12 b12,
+                              p a13 b13, p a14 b14, p a15 b15, p a16 b16,
+                              p a17 b17, p a18 b18, p a19 b19, p a20 b20,
+                              p a21 b21)
+      -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21)
+           (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21)
+p21 = convert unflatten21 unflatten21 flatten21 pT21
+
+p22 :: ProductProfunctor p => (p a1 b1, p a2 b2, p a3 b3, p a4 b4,
+                              p a5 b5, p a6 b6, p a7 b7, p a8 b8,
+                              p a9 b9, p a10 b10, p a11 b11, p a12 b12,
+                              p a13 b13, p a14 b14, p a15 b15, p a16 b16,
+                              p a17 b17, p a18 b18, p a19 b19, p a20 b20,
+                              p a21 b21, p a22 b22)
+      -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22)
+           (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22)
+p22 = convert unflatten22 unflatten22 flatten22 pT22
+
+p23 :: ProductProfunctor p => (p a1 b1, p a2 b2, p a3 b3, p a4 b4,
+                              p a5 b5, p a6 b6, p a7 b7, p a8 b8,
+                              p a9 b9, p a10 b10, p a11 b11, p a12 b12,
+                              p a13 b13, p a14 b14, p a15 b15, p a16 b16,
+                              p a17 b17, p a18 b18, p a19 b19, p a20 b20,
+                              p a21 b21, p a22 b22, p a23 b23)
+      -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23)
+           (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23)
+p23 = convert unflatten23 unflatten23 flatten23 pT23
+
+p24 :: ProductProfunctor p => (p a1 b1, p a2 b2, p a3 b3, p a4 b4,
+                              p a5 b5, p a6 b6, p a7 b7, p a8 b8,
+                              p a9 b9, p a10 b10, p a11 b11, p a12 b12,
+                              p a13 b13, p a14 b14, p a15 b15, p a16 b16,
+                              p a17 b17, p a18 b18, p a19 b19, p a20 b20,
+                              p a21 b21, p a22 b22, p a23 b23, p a24 b24)
+      -> p (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24)
+           (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24)
+p24 = convert unflatten24 unflatten24 flatten24 pT24
diff --git a/Data/Profunctor/Product/Default.hs b/Data/Profunctor/Product/Default.hs
--- a/Data/Profunctor/Product/Default.hs
+++ b/Data/Profunctor/Product/Default.hs
@@ -173,3 +173,96 @@
                       b9, b10, b11, b12, b13, b14, b15, b16, b17, b18) where
   def = p18 (def, def, def, def, def, def, def, def, def, def,
              def, def, def, def, def, def, def, def)
+
+instance (ProductProfunctor p, Default p a1 b1, Default p a2 b2,
+          Default p a3 b3, Default p a4 b4, Default p a5 b5,
+          Default p a6 b6, Default p a7 b7, Default p a8 b8,
+          Default p a9 b9, Default p a10 b10, Default p a11 b11,
+          Default p a12 b12, Default p a13 b13, Default p a14 b14,
+          Default p a15 b15, Default p a16 b16, Default p a17 b17,
+          Default p a18 b18, Default p a19 b19)
+         => Default p (a1, a2, a3, a4, a5, a6, a7, a8,
+                       a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
+                      (b1, b2, b3, b4, b5, b6, b7, b8,
+                      b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19) where
+  def = p19 (def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def, def, def, def, def, def)
+
+instance (ProductProfunctor p, Default p a1 b1, Default p a2 b2,
+          Default p a3 b3, Default p a4 b4, Default p a5 b5,
+          Default p a6 b6, Default p a7 b7, Default p a8 b8,
+          Default p a9 b9, Default p a10 b10, Default p a11 b11,
+          Default p a12 b12, Default p a13 b13, Default p a14 b14,
+          Default p a15 b15, Default p a16 b16, Default p a17 b17,
+          Default p a18 b18, Default p a19 b19, Default p a20 b20)
+         => Default p (a1, a2, a3, a4, a5, a6, a7, a8,
+                       a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+                      (b1, b2, b3, b4, b5, b6, b7, b8,
+                      b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20) where
+  def = p20 (def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def, def, def, def, def, def, def)
+
+instance (ProductProfunctor p, Default p a1 b1, Default p a2 b2,
+          Default p a3 b3, Default p a4 b4, Default p a5 b5,
+          Default p a6 b6, Default p a7 b7, Default p a8 b8,
+          Default p a9 b9, Default p a10 b10, Default p a11 b11,
+          Default p a12 b12, Default p a13 b13, Default p a14 b14,
+          Default p a15 b15, Default p a16 b16, Default p a17 b17,
+          Default p a18 b18, Default p a19 b19, Default p a20 b20,
+          Default p a21 b21)
+         => Default p (a1, a2, a3, a4, a5, a6, a7, a8,
+                       a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21)
+                      (b1, b2, b3, b4, b5, b6, b7, b8,
+                      b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21) where
+  def = p21 (def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def, def, def, def, def, def, def,
+             def)
+
+instance (ProductProfunctor p, Default p a1 b1, Default p a2 b2,
+          Default p a3 b3, Default p a4 b4, Default p a5 b5,
+          Default p a6 b6, Default p a7 b7, Default p a8 b8,
+          Default p a9 b9, Default p a10 b10, Default p a11 b11,
+          Default p a12 b12, Default p a13 b13, Default p a14 b14,
+          Default p a15 b15, Default p a16 b16, Default p a17 b17,
+          Default p a18 b18, Default p a19 b19, Default p a20 b20,
+          Default p a21 b21, Default p a22 b22)
+         => Default p (a1, a2, a3, a4, a5, a6, a7, a8,
+                       a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22)
+                      (b1, b2, b3, b4, b5, b6, b7, b8,
+                      b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22) where
+  def = p22 (def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def, def, def, def, def, def, def,
+             def, def)
+
+instance (ProductProfunctor p, Default p a1 b1, Default p a2 b2,
+          Default p a3 b3, Default p a4 b4, Default p a5 b5,
+          Default p a6 b6, Default p a7 b7, Default p a8 b8,
+          Default p a9 b9, Default p a10 b10, Default p a11 b11,
+          Default p a12 b12, Default p a13 b13, Default p a14 b14,
+          Default p a15 b15, Default p a16 b16, Default p a17 b17,
+          Default p a18 b18, Default p a19 b19, Default p a20 b20,
+          Default p a21 b21, Default p a22 b22, Default p a23 b23)
+         => Default p (a1, a2, a3, a4, a5, a6, a7, a8,
+                       a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23)
+                      (b1, b2, b3, b4, b5, b6, b7, b8,
+                      b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23) where
+  def = p23 (def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def, def, def, def, def, def, def,
+             def, def, def)
+
+instance (ProductProfunctor p, Default p a1 b1, Default p a2 b2,
+          Default p a3 b3, Default p a4 b4, Default p a5 b5,
+          Default p a6 b6, Default p a7 b7, Default p a8 b8,
+          Default p a9 b9, Default p a10 b10, Default p a11 b11,
+          Default p a12 b12, Default p a13 b13, Default p a14 b14,
+          Default p a15 b15, Default p a16 b16, Default p a17 b17,
+          Default p a18 b18, Default p a19 b19, Default p a20 b20,
+          Default p a21 b21, Default p a22 b22, Default p a23 b23,
+          Default p a24 b24)
+         => Default p (a1, a2, a3, a4, a5, a6, a7, a8,
+                       a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24)
+                      (b1, b2, b3, b4, b5, b6, b7, b8,
+                      b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24) where
+  def = p24 (def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def, def, def, def, def, def, def,
+             def, def, def, def)
diff --git a/Data/Profunctor/Product/Flatten.hs b/Data/Profunctor/Product/Flatten.hs
--- a/Data/Profunctor/Product/Flatten.hs
+++ b/Data/Profunctor/Product/Flatten.hs
@@ -86,3 +86,39 @@
   = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
 unflatten18 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
   = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, a18)))))))))))))))))
+
+flatten19 (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12,
+           (a13, (a14, (a15, (a16, (a17, (a18, a19))))))))))))))))))
+  = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
+unflatten19 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
+  = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, (a18, a19))))))))))))))))))
+
+flatten20 (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12,
+           (a13, (a14, (a15, (a16, (a17, (a18, (a19, a20)))))))))))))))))))
+  = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+unflatten20 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+  = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, (a18, (a19, a20)))))))))))))))))))
+
+flatten21 (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12,
+           (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, a21))))))))))))))))))))
+  = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21)
+unflatten21 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21)
+  = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, a21))))))))))))))))))))
+
+flatten22 (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12,
+           (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, (a21, a22)))))))))))))))))))))
+  = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22)
+unflatten22 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22)
+  = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, (a21, a22)))))))))))))))))))))
+
+flatten23 (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12,
+           (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, (a21, (a22, a23))))))))))))))))))))))
+  = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23)
+unflatten23 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23)
+  = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, (a21, (a22, a23))))))))))))))))))))))
+
+flatten24 (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12,
+           (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, (a21, (a22, (a23, a24)))))))))))))))))))))))
+  = (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24)
+unflatten24 (a, b, c, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24)
+  = (a, (b, (c, (a4, (a5, (a6, (a7, (a8, (a9, (a10, (a11, (a12, (a13, (a14, (a15, (a16, (a17, (a18, (a19, (a20, (a21, (a22, (a23, a24)))))))))))))))))))))))
diff --git a/Data/Profunctor/Product/TH.hs b/Data/Profunctor/Product/TH.hs
--- a/Data/Profunctor/Product/TH.hs
+++ b/Data/Profunctor/Product/TH.hs
@@ -43,7 +43,7 @@
 import Data.Profunctor (dimap)
 import Data.Profunctor.Product (ProductProfunctor, p1, p2, p3, p4, p5, p6, p7,
                                 p8, p9, p10, p11, p12, p13, p14, p15, p16, p17,
-                                p18)
+                                p18, p19, p20, p21, p22, p23, p24)
 import Data.Profunctor.Product.Default (Default, def)
 import Language.Haskell.TH (Dec(DataD, SigD, FunD, InstanceD),
                             mkName, TyVarBndr(PlainTV, KindedTV),
@@ -229,6 +229,12 @@
                             16 -> 'p16
                             17 -> 'p17
                             18 -> 'p18
+                            19 -> 'p19
+                            20 -> 'p20
+                            21 -> 'p21
+                            22 -> 'p22
+                            23 -> 'p23
+                            24 -> 'p24
                             _  -> error errorMsg
   where errorMsg = "Data.Profunctor.Product.TH: "
                    ++ show n
diff --git a/Data/Profunctor/Product/Tuples.hs b/Data/Profunctor/Product/Tuples.hs
--- a/Data/Profunctor/Product/Tuples.hs
+++ b/Data/Profunctor/Product/Tuples.hs
@@ -25,3 +25,15 @@
   (a, T16 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17)
 type T18 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 =
   (a, T17 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18)
+type T19 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
+  (a, T18 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19)
+type T20 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
+  (a, T19 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20)
+type T21 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 =
+  (a, T20 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21)
+type T22 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 =
+  (a, T21 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22)
+type T23 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 =
+  (a, T22 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23)
+type T24 a b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 =
+  (a, T23 b c d e f g h a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24)
diff --git a/product-profunctors.cabal b/product-profunctors.cabal
--- a/product-profunctors.cabal
+++ b/product-profunctors.cabal
@@ -1,5 +1,5 @@
 name:          product-profunctors
-version:       0.6.1
+version:       0.6.3
 synopsis:      product-profunctors
 description:   Product profunctors
 homepage:      https://github.com/tomjaguarpaw/product-profunctors
@@ -16,8 +16,8 @@
   Location: https://github.com/tomjaguarpaw/product-profunctors
 
 library
-  build-depends:   base >= 4 && < 5
-                 , profunctors >= 4.0 && < 4.5
+  build-depends:   base >= 4.5 && < 5
+                 , profunctors >= 4.0 && < 5.2
                  , contravariant >= 0.4 && < 1.4
                  , template-haskell
   exposed-modules: Data.Profunctor.Product,
