diff --git a/bifunctors.cabal b/bifunctors.cabal
--- a/bifunctors.cabal
+++ b/bifunctors.cabal
@@ -1,6 +1,6 @@
 name:          bifunctors
 category:      Data, Functors
-version:       3.1
+version:       3.2
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
diff --git a/src/Data/Biapplicative.hs b/src/Data/Biapplicative.hs
--- a/src/Data/Biapplicative.hs
+++ b/src/Data/Biapplicative.hs
@@ -22,6 +22,7 @@
 import Control.Applicative
 import Data.Bifunctor
 import Data.Bifunctor.Apply ((<<$>>))
+import Data.Monoid
 import Data.Tagged
 
 infixl 4 <<*>>, <<*, *>>, <<**>>
@@ -65,6 +66,24 @@
   bipure = (,)
   {-# INLINE bipure #-}
   (f, g) <<*>> (a, b) = (f a, g b)
+  {-# INLINE (<<*>>) #-}
+
+instance Monoid x => Biapplicative ((,,) x) where
+  bipure = (,,) mempty
+  {-# INLINE bipure #-}
+  (x, f, g) <<*>> (x', a, b) = (mappend x x', f a, g b)
+  {-# INLINE (<<*>>) #-}
+
+instance (Monoid x, Monoid y) => Biapplicative ((,,,) x y) where
+  bipure = (,,,) mempty mempty
+  {-# INLINE bipure #-}
+  (x, y, f, g) <<*>> (x', y', a, b) = (mappend x x', mappend y y', f a, g b)
+  {-# INLINE (<<*>>) #-}
+
+instance (Monoid x, Monoid y, Monoid z) => Biapplicative ((,,,,) x y z) where
+  bipure = (,,,,) mempty mempty mempty
+  {-# INLINE bipure #-}
+  (x, y, z, f, g) <<*>> (x', y', z', a, b) = (mappend x x', mappend y y', mappend z z', f a, g b)
   {-# INLINE (<<*>>) #-}
 
 instance Biapplicative Tagged where
diff --git a/src/Data/Bifunctor/Apply.hs b/src/Data/Bifunctor/Apply.hs
--- a/src/Data/Bifunctor/Apply.hs
+++ b/src/Data/Bifunctor/Apply.hs
@@ -67,14 +67,21 @@
   (f, g) <<.>> (a, b) = (f a, g b)
   {-# INLINE (<<.>>) #-}
 
-instance Semigroup s => Biapply ((,,) s) where
-  (s,f,g) <<.>> (t,a,b) = (s <> t, f a, g b)
+instance Semigroup x => Biapply ((,,) x) where
+  (x, f, g) <<.>> (x', a, b) = (x <> x', f a, g b)
   {-# INLINE (<<.>>) #-}
 
+instance (Semigroup x, Semigroup y) => Biapply ((,,,) x y) where
+  (x, y, f, g) <<.>> (x', y', a, b) = (x <> x', y <> y', f a, g b)
+  {-# INLINE (<<.>>) #-}
+
+instance (Semigroup x, Semigroup y, Semigroup z) => Biapply ((,,,,) x y z) where
+  (x, y, z, f, g) <<.>> (x', y', z', a, b) = (x <> x', y <> y', z <> z', f a, g b)
+  {-# INLINE (<<.>>) #-}
+
 instance Biapply Const where
   Const f <<.>> Const x = Const (f x)
   {-# INLINE (<<.>>) #-}
-
 
 instance Biapply Tagged where
   Tagged f <<.>> Tagged x = Tagged (f x)
