diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 2.2 (2022-03-15)
+
+- Drop `semigroupoids` dependency in favour of `foldable1-classes-compat`.
+  Be careful with which `Foldable1` class you end up using.
+
 # 2.1 (2022-12-27)
 
 - Fix `comprable` for `PartialOrd (a,b)` instance
diff --git a/lattices.cabal b/lattices.cabal
--- a/lattices.cabal
+++ b/lattices.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               lattices
-version:            2.1
+version:            2.2
 category:           Math
 license:            BSD3
 license-file:       LICENSE
@@ -34,6 +34,7 @@
    || ==9.0.2
    || ==9.2.5
    || ==9.4.4
+   || ==9.6.1
 
 synopsis:
   Fine-grained library for constructing and manipulating lattices
@@ -82,25 +83,27 @@
     Algebra.PartialOrd.Instances
 
   build-depends:
-      base                        >=4.6      && <4.18
-    , base-compat                 >=0.10.5   && <0.13
+      base                        >=4.6      && <4.19
+    , base-compat                 >=0.13     && <0.14
     , containers                  >=0.5.0.0  && <0.7
     , deepseq                     >=1.3.0.0  && <1.5
     , hashable                    >=1.2.7.0  && <1.5
     , integer-logarithms          >=1.0.3    && <1.1
     , QuickCheck                  >=2.12.6.1 && <2.15
-    , semigroupoids               >=5.3.2    && <5.4
     , tagged                      >=0.8.6    && <0.9
     , transformers                >=0.3.0.0  && <0.7
     , universe-base               >=1.1      && <1.2
     , universe-reverse-instances  >=1.1      && <1.2
     , unordered-containers        >=0.2.8.0  && <0.3
 
+  if !impl(ghc >=9.6)
+    build-depends: foldable1-classes-compat >=0.1 && <0.2
+
   if !impl(ghc >=9.2)
     if impl(ghc >=9.0)
       build-depends: ghc-prim
     else
-      build-depends: OneTuple >=0.3 && <0.4
+      build-depends: OneTuple >=0.4 && <0.5
 
   if !impl(ghc >=8.0)
     build-depends: semigroups >=0.18.5 && <0.21
diff --git a/src/Algebra/Heyting.hs b/src/Algebra/Heyting.hs
--- a/src/Algebra/Heyting.hs
+++ b/src/Algebra/Heyting.hs
@@ -27,12 +27,16 @@
 import qualified Data.HashSet as HS
 import qualified Data.Set     as Set
 
-#if MIN_VERSION_base(4,16,0)
-import Data.Tuple (Solo (..))
+#if MIN_VERSION_base(4,18,0)
+import Data.Tuple (Solo (MkSolo))
+#elif MIN_VERSION_base(4,16,0)
+import Data.Tuple (Solo (Solo))
+#define MkSolo Solo
 #elif MIN_VERSION_base(4,15,0)
-import GHC.Tuple (Solo (..))
+import GHC.Tuple (Solo (Solo))
+#define MkSolo Solo
 #else
-import Data.Tuple.Solo (Solo (..))
+import Data.Tuple.Solo (Solo (MkSolo))
 #endif
 
 -- | A Heyting algebra is a bounded lattice equipped with a
@@ -135,9 +139,9 @@
 
 -- | @since 2.0.3
 instance Heyting a => Heyting (Solo a) where
-    Solo a ==> Solo b = Solo (a ==> b)
-    neg (Solo a)      = Solo (neg a)
-    Solo a <=> Solo b = Solo (a <=> b)
+    MkSolo a ==> MkSolo b = MkSolo (a ==> b)
+    neg (MkSolo a)      = MkSolo (neg a)
+    MkSolo a <=> MkSolo b = MkSolo (a <=> b)
 
 -------------------------------------------------------------------------------
 -- Sets
diff --git a/src/Algebra/Lattice.hs b/src/Algebra/Lattice.hs
--- a/src/Algebra/Lattice.hs
+++ b/src/Algebra/Lattice.hs
@@ -45,18 +45,18 @@
 
 import qualified Algebra.PartialOrd as PO
 
-import Control.Applicative     (Const (..))
-import Control.Monad.Zip       (MonadZip (..))
-import Data.Data               (Data, Typeable)
-import Data.Functor.Identity   (Identity (..))
-import Data.Hashable           (Hashable (..))
-import Data.Proxy              (Proxy (..))
-import Data.Semigroup          (All (..), Any (..), Endo (..), Semigroup (..))
-import Data.Semigroup.Foldable (Foldable1 (..))
-import Data.Tagged             (Tagged (..))
-import Data.Universe.Class     (Finite (..), Universe (..))
-import Data.Void               (Void)
-import GHC.Generics            (Generic)
+import Control.Applicative   (Const (..))
+import Control.Monad.Zip     (MonadZip (..))
+import Data.Data             (Data, Typeable)
+import Data.Foldable1        (Foldable1 (..))
+import Data.Functor.Identity (Identity (..))
+import Data.Hashable         (Hashable (..))
+import Data.Proxy            (Proxy (..))
+import Data.Semigroup        (All (..), Any (..), Endo (..), Semigroup (..))
+import Data.Tagged           (Tagged (..))
+import Data.Universe.Class   (Finite (..), Universe (..))
+import Data.Void             (Void)
+import GHC.Generics          (Generic)
 
 import qualified Data.HashMap.Lazy as HM
 import qualified Data.HashSet      as HS
@@ -66,12 +66,16 @@
 import qualified Data.Set          as Set
 import qualified Test.QuickCheck   as QC
 
-#if MIN_VERSION_base(4,16,0)
-import Data.Tuple (Solo (..))
+#if MIN_VERSION_base(4,18,0)
+import Data.Tuple (Solo (MkSolo))
+#elif MIN_VERSION_base(4,16,0)
+import Data.Tuple (Solo (Solo))
+#define MkSolo Solo
 #elif MIN_VERSION_base(4,15,0)
-import GHC.Tuple (Solo (..))
+import GHC.Tuple (Solo (Solo))
+#define MkSolo Solo
 #else
-import Data.Tuple.Solo (Solo (..))
+import Data.Tuple.Solo (Solo (MkSolo))
 #endif
 
 infixr 6 /\ -- This comment needed because of CPP
@@ -529,16 +533,16 @@
 
 -- | @since 2.0.3
 instance Lattice a => Lattice (Solo a) where
-  Solo a \/ Solo b = Solo (a \/ b)
-  Solo a /\ Solo b = Solo (a /\ b)
+  MkSolo a \/ MkSolo b = MkSolo (a \/ b)
+  MkSolo a /\ MkSolo b = MkSolo (a /\ b)
 
 -- | @since 2.0.3
 instance BoundedMeetSemiLattice a => BoundedMeetSemiLattice (Solo a) where
-  top = Solo top
+  top = MkSolo top
 
 -- | @since 2.0.3
 instance BoundedJoinSemiLattice a => BoundedJoinSemiLattice (Solo a) where
-  bottom = Solo bottom
+  bottom = MkSolo bottom
 
 -------------------------------------------------------------------------------
 -- Theorems
