diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,11 @@
+5.6.1 [2023.03.13]
+------------------
+* Provide instances for the `Swap` and `Assoc` type classes from the `assoc`
+  package. (These instances were previously defined in `assoc` itself, but they
+  have been migrated over to `bifunctors` in tandem with the `assoc-1.1`
+  release.)
+* Only depend on `bifunctor-classes-compat` if building with GHC 8.0.
+
 5.6 [2023.03.12]
 ----------------
 * Drop support for GHC 7.10 and earlier.
diff --git a/bifunctors.cabal b/bifunctors.cabal
--- a/bifunctors.cabal
+++ b/bifunctors.cabal
@@ -1,7 +1,7 @@
 cabal-version: 1.24
 name:          bifunctors
 category:      Data, Functors
-version:       5.6
+version:       5.6.1
 license:       BSD3
 license-file:  LICENSE
 author:        Edward A. Kmett
@@ -43,15 +43,17 @@
   hs-source-dirs: src
   build-depends:
     base                     >= 4.9     && < 5,
-    bifunctor-classes-compat >= 0.1     && < 0.2,
+    assoc                    >= 1.1     && < 1.2,
     comonad                  >= 5.0.7   && < 6,
     containers               >= 0.5.7.1 && < 0.7,
     template-haskell         >= 2.11    && < 2.21,
     th-abstraction           >= 0.4.2.0 && < 0.6,
     transformers             >= 0.5     && < 0.7
 
-  if !impl(ghc > 8.2)
-    build-depends: transformers-compat >= 0.6 && < 0.8
+  if !impl(ghc >= 8.2)
+    build-depends:
+      bifunctor-classes-compat >= 0.1 && < 0.2,
+      transformers-compat      >= 0.6 && < 0.8
 
   if flag(tagged)
     build-depends: tagged >= 0.8.6 && < 1
diff --git a/src/Data/Bifunctor/Biff.hs b/src/Data/Bifunctor/Biff.hs
--- a/src/Data/Bifunctor/Biff.hs
+++ b/src/Data/Bifunctor/Biff.hs
@@ -24,6 +24,7 @@
 import Data.Biapplicative
 import Data.Bifoldable
 import Data.Bifoldable1 (Bifoldable1(..))
+import Data.Bifunctor.Swap (Swap (..))
 import Data.Bitraversable
 import Data.Foldable1 (Foldable1(..))
 import Data.Functor.Classes
@@ -103,3 +104,7 @@
 instance (Bitraversable p, Traversable f, Traversable g) => Bitraversable (Biff p f g) where
   bitraverse f g = fmap Biff . bitraverse (traverse f) (traverse g) . runBiff
   {-# INLINE bitraverse #-}
+
+-- | @since 5.6.1
+instance (f ~ g, Functor f, Swap p) => Swap (Biff p f g) where
+  swap = Biff . swap . runBiff
diff --git a/src/Data/Bifunctor/Flip.hs b/src/Data/Bifunctor/Flip.hs
--- a/src/Data/Bifunctor/Flip.hs
+++ b/src/Data/Bifunctor/Flip.hs
@@ -21,6 +21,8 @@
 import Data.Bifoldable
 import Data.Bifoldable1 (Bifoldable1(..))
 import Data.Bifunctor.Functor
+import Data.Bifunctor.Swap (Swap (..))
+import Data.Bifunctor.Assoc (Assoc (..))
 import Data.Bitraversable
 import Data.Functor.Classes
 import GHC.Generics
@@ -99,3 +101,12 @@
 
 instance BifunctorFunctor Flip where
   bifmap f (Flip p) = Flip (f p)
+
+-- | @since 5.6.1
+instance Assoc p => Assoc (Flip p) where
+    assoc   = Flip . first Flip . unassoc . second runFlip . runFlip
+    unassoc = Flip . second Flip . assoc . first runFlip . runFlip
+
+-- | @since 5.6.1
+instance Swap p => Swap (Flip p) where
+    swap = Flip . swap . runFlip
diff --git a/src/Data/Bifunctor/Product.hs b/src/Data/Bifunctor/Product.hs
--- a/src/Data/Bifunctor/Product.hs
+++ b/src/Data/Bifunctor/Product.hs
@@ -30,6 +30,7 @@
 import Data.Bifoldable
 import Data.Bifoldable1 (Bifoldable1(..))
 import Data.Bifunctor.Functor
+import Data.Bifunctor.Swap (Swap (..))
 import Data.Bitraversable
 import Data.Functor.Classes
 import qualified Data.Semigroup as S
@@ -131,3 +132,7 @@
 
 instance (A.ArrowPlus p, A.ArrowPlus q) => A.ArrowPlus (Product p q) where
   Pair x y <+> Pair x' y' = Pair (x A.<+> x') (y A.<+> y')
+
+-- | @since 5.6.1
+instance (Swap p, Swap q) => Swap (Product p q) where
+    swap (Pair p q) = Pair (swap p) (swap q)
diff --git a/src/Data/Bifunctor/Sum.hs b/src/Data/Bifunctor/Sum.hs
--- a/src/Data/Bifunctor/Sum.hs
+++ b/src/Data/Bifunctor/Sum.hs
@@ -13,6 +13,7 @@
 
 import Data.Bifunctor
 import Data.Bifunctor.Functor
+import Data.Bifunctor.Swap (Swap (..))
 import Data.Bifoldable
 import Data.Bitraversable
 import Data.Functor.Classes
@@ -81,3 +82,8 @@
   bijoin (R2 q) = q
   bibind _ (L2 p) = L2 p
   bibind f (R2 q) = f q
+
+-- | @since 5.6.1
+instance (Swap p, Swap q) => Swap (Sum p q) where
+  swap (L2 p) = L2 (swap p)
+  swap (R2 q) = R2 (swap q)
diff --git a/src/Data/Bifunctor/Tannen.hs b/src/Data/Bifunctor/Tannen.hs
--- a/src/Data/Bifunctor/Tannen.hs
+++ b/src/Data/Bifunctor/Tannen.hs
@@ -29,6 +29,7 @@
 
 import Data.Bifunctor as B
 import Data.Bifunctor.Functor
+import Data.Bifunctor.Swap (Swap (..))
 import Data.Biapplicative
 import Data.Bifoldable
 import Data.Bifoldable1 (Bifoldable1(..))
@@ -152,3 +153,6 @@
 instance (Applicative f, ArrowPlus p) => ArrowPlus (Tannen f p) where
   Tannen f <+> Tannen g = Tannen (liftA2 (<+>) f g)
 
+-- | @since 5.6.1
+instance (Functor f, Swap p) => Swap (Tannen f p) where
+  swap = Tannen . fmap swap . runTannen
