diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,10 @@
+5.0.5 [2024.10.26]
+------------------
+* Require building with GHC 8.0 or later.
+* Remove the `-fsemigroups` `cabal` flag, as `pointed` no longer needs to depend
+  on the `semigroups` library for backwards compatibility.
+* Allow building with `data-default-class-0.2.*`.
+
 5.0.4 [2022.05.07]
 ------------------
 * Allow building with `transformers-0.6.*`.
diff --git a/pointed.cabal b/pointed.cabal
--- a/pointed.cabal
+++ b/pointed.cabal
@@ -1,6 +1,6 @@
 name:          pointed
 category:      Data
-version:       5.0.4
+version:       5.0.5
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
@@ -13,18 +13,18 @@
 synopsis:      Pointed and copointed data
 description:   Pointed and copointed data.
 build-type:    Simple
-tested-with:   GHC == 7.4.2
-             , GHC == 7.6.3
-             , GHC == 7.8.4
-             , GHC == 7.10.3
-             , GHC == 8.0.2
+tested-with:   GHC == 8.0.2
              , GHC == 8.2.2
              , GHC == 8.4.4
              , GHC == 8.6.5
              , GHC == 8.8.4
              , GHC == 8.10.7
-             , GHC == 9.0.1
-             , GHC == 9.2.1
+             , GHC == 9.0.2
+             , GHC == 9.2.8
+             , GHC == 9.4.8
+             , GHC == 9.6.6
+             , GHC == 9.8.2
+             , GHC == 9.10.1
 extra-source-files:
   README.markdown
   CHANGELOG.markdown
@@ -49,10 +49,6 @@
   description: You can disable the use of the `semigroupoids` package using `-f-semigroupoids`.
   default: True
   manual: True
-flag semigroups
-  description: You can disable the use of the `semigroups` package using `-f-semigroups`.
-  default: True
-  manual: True
 flag stm
   description: You can disable the use of the `stm` package using `-f-stm`.
   default: True
@@ -71,26 +67,20 @@
   manual: True
 
 library
-  build-depends: base >= 4.5 && < 5,
-                 data-default-class >= 0.0.1 && < 0.2
-
-  if impl(ghc >= 7.2 && < 7.6)
-    build-depends: ghc-prim
+  build-depends: base >= 4.9 && < 5,
+                 data-default-class >= 0.0.1 && < 0.3
 
   if flag(comonad)
     build-depends: comonad >= 5 && < 6
 
   if flag(containers)
-    build-depends: containers >= 0.4 && < 0.7
+    build-depends: containers >= 0.4 && < 0.8
 
   if flag(kan-extensions)
     build-depends: kan-extensions >= 5 && < 6
 
   if flag(semigroupoids)
-    build-depends: semigroupoids >= 4 && < 6
-
-  if flag(semigroups)
-    build-depends: semigroups >= 0.8.3.1 && < 1
+    build-depends: semigroupoids >= 4 && < 7
 
   if flag(stm)
     build-depends: stm >= 2.1.2.1 && < 2.6
@@ -102,7 +92,7 @@
     build-depends: transformers >= 0.2 && < 0.7, transformers-compat >= 0.3 && < 1
 
   if flag(unordered-containers)
-    build-depends: hashable >= 1.1 && < 1.5, unordered-containers >= 0.2 && < 0.3
+    build-depends: hashable >= 1.1 && < 1.6, unordered-containers >= 0.2 && < 0.3
 
   exposed-modules:
     Data.Pointed
diff --git a/src/Data/Copointed.hs b/src/Data/Copointed.hs
--- a/src/Data/Copointed.hs
+++ b/src/Data/Copointed.hs
@@ -2,10 +2,6 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
 
-#ifndef MIN_VERSION_base
-#define MIN_VERSION_base(x,y,z) 0
-#endif
-
 module Data.Copointed where
 
 import Control.Applicative
@@ -31,10 +27,8 @@
 #endif
 
 
-#if defined(MIN_VERSION_semigroups) || (MIN_VERSION_base(4,9,0))
 import Data.Semigroup as Semigroup
 import Data.List.NonEmpty (NonEmpty(..))
-#endif
 
 import qualified Data.Monoid as Monoid
 
@@ -42,14 +36,9 @@
 import Data.Tagged
 #endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,8,0))
 import Data.Functor.Identity
-#endif
-
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,9,0))
 import Data.Functor.Sum as F
 import Data.Functor.Compose
-#endif
 
 #ifdef MIN_VERSION_transformers
 import Data.Functor.Reverse
@@ -109,19 +98,15 @@
   copoint = unTagged
 #endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,8,0))
 instance Copointed Identity where
   copoint = runIdentity
-#endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,9,0))
 instance (Copointed p, Copointed q) => Copointed (Compose p q) where
   copoint = copoint . copoint . getCompose
 
 instance (Copointed f, Copointed g) => Copointed (F.Sum f g) where
   copoint (F.InL m) = copoint m
   copoint (F.InR m) = copoint m
-#endif
 
 #ifdef MIN_VERSION_transformers
 instance Copointed f => Copointed (Backwards f) where
@@ -153,7 +138,6 @@
 instance Copointed Monoid.Product where
   copoint = Monoid.getProduct
 
-#if defined(MIN_VERSION_semigroups) || (MIN_VERSION_base(4,9,0))
 instance Copointed NonEmpty where
   copoint ~(a :| _) = a
 
@@ -171,20 +155,9 @@
 
 instance Copointed WrappedMonoid where
   copoint = unwrapMonoid
-#endif
 
-#ifdef MIN_VERSION_semigroups
-#if MIN_VERSION_semigroups(0,16,2)
-#define HAVE_ARG 1
-#endif
-#elif MIN_VERSION_base(4,9,0)
-#define HAVE_ARG 1
-#endif
-
-#ifdef HAVE_ARG
 instance Copointed (Arg a) where
   copoint (Arg _ b) = b
-#endif
 
 #ifdef MIN_VERSION_semigroupoids
 instance Copointed f => Copointed (WrappedApplicative f) where
diff --git a/src/Data/Pointed.hs b/src/Data/Pointed.hs
--- a/src/Data/Pointed.hs
+++ b/src/Data/Pointed.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
 
 #ifndef MIN_VERSION_base
 #define MIN_VERSION_base(x,y,z) 0
@@ -33,10 +33,8 @@
 import Data.Functor.Day.Curried
 #endif
 
-#if defined(MIN_VERSION_semigroups) || (MIN_VERSION_base(4,9,0))
 import Data.Semigroup as Semigroup
 import Data.List.NonEmpty (NonEmpty(..))
-#endif
 
 #ifdef MIN_VERSION_semigroupoids
 import Data.Functor.Bind
@@ -47,14 +45,10 @@
 import Control.Concurrent.STM
 #endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,8,0))
 import Data.Functor.Identity
-#endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,9,0))
 import Data.Functor.Compose
 import qualified Data.Functor.Product as Functor
-#endif
 
 #ifdef MIN_VERSION_transformers
 import Data.Functor.Constant
@@ -79,9 +73,7 @@
 # endif
 #endif
 
-#if defined(MIN_VERSION_tagged) || (MIN_VERSION_base(4,7,0))
 import Data.Proxy
-#endif
 
 #ifdef MIN_VERSION_tagged
 import Data.Tagged
@@ -111,10 +103,8 @@
 instance Pointed ZipList where
   point = pure
 
-#if MIN_VERSION_base(4,8,0) || defined(MIN_VERSION_transformers)
 instance Pointed Identity where
   point = Identity
-#endif
 
 instance Pointed ((->)e) where
   point = const
@@ -191,7 +181,6 @@
   point = MaybeApply . Right
 #endif
 
-#if defined(MIN_VERSION_semigroups) || (MIN_VERSION_base(4,9,0))
 instance Pointed NonEmpty where
   point a = a :| []
 
@@ -207,52 +196,35 @@
 instance Pointed Semigroup.Min where
   point = Semigroup.Min
 
-# if !(MIN_VERSION_base(4,16,0))
+#if !(MIN_VERSION_base(4,16,0))
 instance Pointed Option where
   point = Option . Just
-# endif
+#endif
 
 instance Pointed WrappedMonoid where
   point = WrapMonoid
-#endif
 
-#ifdef MIN_VERSION_semigroups
-#if MIN_VERSION_semigroups(0,16,2)
-#define HAVE_ARG 1
-#endif
-#elif MIN_VERSION_base(4,9,0)
-#define HAVE_ARG 1
-#endif
-
-#ifdef HAVE_ARG
 instance Default a => Pointed (Arg a) where
   point = Arg def
-#endif
 
 #ifdef MIN_VERSION_stm
 instance Pointed STM where
   point = return
 #endif
 
-#if defined(MIN_VERSION_tagged) || (MIN_VERSION_base(4,7,0))
 instance Pointed Proxy where
   point _ = Proxy
-#endif
 
 #ifdef MIN_VERSION_tagged
 instance Pointed (Tagged a) where
   point = Tagged
 #endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,9,0))
 instance (Pointed p, Pointed q) => Pointed (Compose p q) where
   point = Compose . point . point
-#endif
 
-#if defined(MIN_VERSION_transformers) || (MIN_VERSION_base(4,9,0))
 instance (Pointed p, Pointed q) => Pointed (Functor.Product p q) where
   point a = Functor.Pair (point a) (point a)
-#endif
 
 #ifdef MIN_VERSION_transformers
 instance Pointed (ContT r m) where
