diff --git a/Data/Semigroupoid/Coproduct.hs b/Data/Semigroupoid/Coproduct.hs
--- a/Data/Semigroupoid/Coproduct.hs
+++ b/Data/Semigroupoid/Coproduct.hs
@@ -4,6 +4,7 @@
 
 import Data.Semigroupoid
 import Data.Semigroupoid.Dual
+import Data.Groupoid
 
 data L a
 data R a
@@ -16,6 +17,10 @@
   L f `o` L g = L (f `o` g)
   R f `o` R g = R (f `o` g)
   _ `o` _ = error "GADT fail"
+
+instance (Groupoid j, Groupoid k) => Groupoid (Coproduct j k) where
+  inv (L f) = L (inv f)
+  inv (R f) = R (inv f)
 
 distributeDualCoproduct :: Dual (Coproduct j k) a b -> Coproduct (Dual j) (Dual k) a b
 distributeDualCoproduct (Dual (L l)) = L (Dual l)
diff --git a/Data/Semigroupoid/Product.hs b/Data/Semigroupoid/Product.hs
--- a/Data/Semigroupoid/Product.hs
+++ b/Data/Semigroupoid/Product.hs
@@ -7,12 +7,16 @@
 
 import Data.Semigroupoid
 import Data.Semigroupoid.Dual
+import Data.Groupoid
 
 data Product j k a b where
   Pair :: j a b -> k a' b' -> Product j k (a,a') (b,b')
 
 instance (Semigroupoid j, Semigroupoid k) => Semigroupoid (Product j k) where
   Pair w x `o` Pair y z = Pair (w `o` y) (x `o` z)
+
+instance (Groupoid j, Groupoid k) => Groupoid (Product j k) where
+  inv (Pair w x) = Pair (inv w) (inv x)
 
 distributeDualProduct :: Dual (Product j k) a b -> Product (Dual j) (Dual k) a b
 distributeDualProduct (Dual (Pair l r)) = Pair (Dual l) (Dual r)
diff --git a/semigroupoid-extras.cabal b/semigroupoid-extras.cabal
--- a/semigroupoid-extras.cabal
+++ b/semigroupoid-extras.cabal
@@ -1,6 +1,6 @@
 name:          semigroupoid-extras
 category:      Control
-version:       0.2.4.1
+version:       0.2.5
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -22,6 +22,7 @@
     base >= 4 && < 5,
     distributive >= 0.2 && < 0.3,
     semigroupoids >= 1.2.2 && < 1.3,
+    groupoids >= 0.1.1 && < 0.2,
     comonad >= 1.1 && < 1.2
 
   exposed-modules:
