diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,11 @@
+3.12.5 [2024.12.06]
+-------------------
+* Require building with GHC 8.0 or later.
+* `Data.Semigroup.Instances` no longer defines an orphan `Semigroup` instance
+  for `FingerTree`, as this instance was only offered on old versions of `base`
+  that `reducers` no longer supports. As such, the `Data.Semigroup.Instances`
+  module is now deprecated.
+
 3.12.4 [2021.11.01]
 -------------------
 * Allow building with GHC 9.2.
diff --git a/reducers.cabal b/reducers.cabal
--- a/reducers.cabal
+++ b/reducers.cabal
@@ -1,6 +1,6 @@
 name:          reducers
 category:      Data, Math, Numerical, Semigroups
-version:       3.12.4
+version:       3.12.5
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
@@ -14,20 +14,19 @@
 description:   Semigroups, specialized containers and a general map/reduce framework.
 build-type:    Simple
 extra-source-files: CHANGELOG.markdown README.markdown
-tested-with:   GHC == 7.0.4
-             , GHC == 7.2.2
-             , 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.4
+             , GHC == 9.10.1
+             , GHC == 9.12.1
 
 source-repository head
   type: git
@@ -37,20 +36,16 @@
   hs-source-dirs: src
 
   build-depends:
-    base                   >= 4        && < 5,
+    base                   >= 4.9      && < 5,
     array                  >= 0.3      && < 0.6,
     transformers           >= 0.2      && < 0.7,
-    bytestring             >= 0.9.1    && < 0.12,
-    containers             >= 0.3      && < 0.7,
+    bytestring             >= 0.9.1    && < 0.13,
+    containers             >= 0.3      && < 0.8,
     fingertree             >= 0.1      && < 0.2,
-    hashable               >= 1.1.2.1  && < 1.4,
-    text                   >= 0.11.1.5 && < 1.3,
+    hashable               >= 1.1.2.1  && < 1.6,
+    text                   >= 0.11.1.5 && < 2.2,
     unordered-containers   >= 0.2      && < 0.3,
-    semigroupoids          >= 4        && < 6
-
-  if impl(ghc < 8.0)
-    build-depends:
-      semigroups           >= 0.9      && < 1
+    semigroupoids          >= 4        && < 7
 
   exposed-modules:
     Data.Generator
@@ -73,9 +68,6 @@
     cpp-options: -DLANGUAGE_DeriveDataTypeable
 
   ghc-options: -Wall
-  default-language: Haskell2010
-
   -- hack around the buggy unused matches check for class associated types in ghc 8 rc1
-  if impl(ghc >= 8)
-    ghc-options: -fno-warn-unused-matches
-
+  ghc-options: -Wno-unused-matches
+  default-language: Haskell2010
diff --git a/src/Data/Generator.hs b/src/Data/Generator.hs
--- a/src/Data/Generator.hs
+++ b/src/Data/Generator.hs
@@ -36,10 +36,6 @@
   , reduceWith
   ) where
 
-#if __GLASGOW_HASKELL__ < 710
-import Data.Monoid (Monoid, mappend, mempty)
-#endif
-
 import Data.Array
 import Data.Text (Text)
 import qualified Data.Text as Text
@@ -65,11 +61,7 @@
 import Data.List.NonEmpty (NonEmpty)
 import qualified Data.List.NonEmpty as NonEmpty
 -- import Control.Parallel.Strategies (rseq, parMap)
-#if __GLASGOW_HASKELL__ < 710
-import Data.Foldable (fold,foldMap)
-#else
 import Data.Foldable (fold)
-#endif
 import Data.Semigroup.Reducer
 
 -- | minimal definition 'mapReduce' or 'mapTo'
@@ -167,11 +159,7 @@
   type Elem (Values (Map k v)) = v
   mapReduce f = mapReduce f . Map.elems . getValues
 
-#if MIN_VERSION_base(4,9,0)
 instance Generator (Values (Array i e)) where
-#else
-instance Ix i => Generator (Values (Array i e)) where
-#endif
   type Elem (Values (Array i e)) = e
   mapReduce f = mapReduce f . elems . getValues
 
diff --git a/src/Data/Generator/Combinators.hs b/src/Data/Generator/Combinators.hs
--- a/src/Data/Generator/Combinators.hs
+++ b/src/Data/Generator/Combinators.hs
@@ -1,8 +1,4 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702 && __GLASGOW_HASKELL__ < 710
-{-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -53,9 +49,7 @@
 import Prelude hiding
   ( mapM_, any, all, elem, filter, concatMap, and, or
   , sum, product, notElem, replicate, cycle, repeat
-#if __GLASGOW_HASKELL__ >= 710
   , foldMap
-#endif
   )
 import Control.Applicative (Alternative)
 import Control.Monad (MonadPlus)
@@ -66,11 +60,6 @@
 import Data.Semigroup.Monad (Action(..))
 import Data.Semigroup.MonadPlus (MonadSum(..))
 import Data.Semigroup.Reducer (Reducer(..))
-
-#if !(MIN_VERSION_base(4,8,0))
-import Control.Applicative (Applicative)
-import Data.Monoid (Monoid(..))
-#endif
 
 -- | Efficiently 'mapReduce' a 'Generator' using the 'Traversal' monoid. A specialized version of its namesake from "Data.Foldable"
 --
diff --git a/src/Data/Semigroup/Alt.hs b/src/Data/Semigroup/Alt.hs
--- a/src/Data/Semigroup/Alt.hs
+++ b/src/Data/Semigroup/Alt.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts #-}
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -23,10 +21,6 @@
 
 import Data.Functor.Plus
 import Data.Semigroup.Reducer (Reducer(..))
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.Monoid (Monoid(..))
-#endif
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..))
diff --git a/src/Data/Semigroup/Alternative.hs b/src/Data/Semigroup/Alternative.hs
--- a/src/Data/Semigroup/Alternative.hs
+++ b/src/Data/Semigroup/Alternative.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts, TypeOperators #-}
 {-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -23,10 +21,6 @@
 
 import Control.Applicative
 import Data.Semigroup.Reducer (Reducer(..))
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.Monoid (Monoid(..))
-#endif
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..))
diff --git a/src/Data/Semigroup/Applicative.hs b/src/Data/Semigroup/Applicative.hs
--- a/src/Data/Semigroup/Applicative.hs
+++ b/src/Data/Semigroup/Applicative.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts, TypeOperators #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE MonoLocalBinds #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -23,12 +21,10 @@
     , Ap(..)
     ) where
 
+#if !(MIN_VERSION_base(4,18,0))
 import Control.Applicative
-import Data.Semigroup.Reducer (Reducer(..))
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.Monoid (Monoid(..))
 #endif
+import Data.Semigroup.Reducer (Reducer(..))
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..))
diff --git a/src/Data/Semigroup/Apply.hs b/src/Data/Semigroup/Apply.hs
--- a/src/Data/Semigroup/Apply.hs
+++ b/src/Data/Semigroup/Apply.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE MonoLocalBinds #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
diff --git a/src/Data/Semigroup/Generator.hs b/src/Data/Semigroup/Generator.hs
--- a/src/Data/Semigroup/Generator.hs
+++ b/src/Data/Semigroup/Generator.hs
@@ -1,7 +1,4 @@
 {-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, TypeFamilies, CPP #-}
-#if __GLASGOW_HASKELL__ >= 702 && __GLASGOW_HASKELL__ < 710
-{-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -33,11 +30,6 @@
 import Data.Semigroup.Foldable
 import Data.Semigroup.Reducer
 import Data.Generator
-
--- #if !(MIN_VERSION_base(4,8,0))
--- import Data.Monoid (Monoid(..))
--- import Data.Foldable (fold,foldMap)
--- #endif
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..)) -- , WrappedMonoid(..))
diff --git a/src/Data/Semigroup/Instances.hs b/src/Data/Semigroup/Instances.hs
--- a/src/Data/Semigroup/Instances.hs
+++ b/src/Data/Semigroup/Instances.hs
@@ -1,14 +1,5 @@
-{-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702 && __GLASGOW_HASKELL__ < 710
-{-# LANGUAGE Trustworthy #-}
-#endif
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-module Data.Semigroup.Instances where
-
-#if !(MIN_VERSION_fingertree(0,1,2) && MIN_VERSION_base(4,9,0))
-import Data.FingerTree
-import Data.Semigroup
-
-instance Measured v a => Semigroup (FingerTree v a) where
-  (<>) = mappend
-#endif
+-- | Historically, this module defined an orphan @Semigroup@ instance for
+-- @FingerTree@ on old versions of @base@. Nowadays, the @reducers@ library
+-- no longer supports these old versions of @base@, so this module no longer
+-- defines anything. As such, you should not need to import this.
+module Data.Semigroup.Instances {-# DEPRECATED "This module no longer defines any instances. You should not need to import it." #-} where
diff --git a/src/Data/Semigroup/Monad.hs b/src/Data/Semigroup/Monad.hs
--- a/src/Data/Semigroup/Monad.hs
+++ b/src/Data/Semigroup/Monad.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts, TypeOperators #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE MonoLocalBinds #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -25,11 +23,6 @@
 
 import Control.Monad (liftM, liftM2)
 import Data.Semigroup.Reducer (Reducer(..))
-
-#if !(MIN_VERSION_base(4,8,0))
-import Control.Applicative (Applicative(..))
-import Data.Monoid (Monoid(..))
-#endif
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..))
diff --git a/src/Data/Semigroup/MonadPlus.hs b/src/Data/Semigroup/MonadPlus.hs
--- a/src/Data/Semigroup/MonadPlus.hs
+++ b/src/Data/Semigroup/MonadPlus.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts, TypeOperators #-}
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -24,11 +22,6 @@
 import Control.Applicative (Alternative(..))
 import Control.Monad (MonadPlus(..))
 import Data.Semigroup.Reducer (Reducer(..))
-
-#if !(MIN_VERSION_base(4,8,0))
-import Control.Applicative (Applicative(..))
-import Data.Monoid (Monoid(..))
-#endif
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..))
diff --git a/src/Data/Semigroup/Reducer.hs b/src/Data/Semigroup/Reducer.hs
--- a/src/Data/Semigroup/Reducer.hs
+++ b/src/Data/Semigroup/Reducer.hs
@@ -1,7 +1,5 @@
 {-# LANGUAGE UndecidableInstances , FlexibleContexts , MultiParamTypeClasses , FlexibleInstances , GeneralizedNewtypeDeriving, TypeOperators, ScopedTypeVariables, CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 #ifndef MIN_VERSION_semigroups
 #define MIN_VERSION_semigroups(x,y,z) 1
@@ -29,20 +27,11 @@
   , Count(..)
   ) where
 
-#if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-#endif
-
 import qualified Data.Monoid as Monoid
 import Data.Semigroup as Semigroup
 import Data.Semigroup.Foldable
-import Data.Semigroup.Instances ()
 import Data.Hashable
 
-#if __GLASGOW_HASKELL__ < 710
-import Data.Foldable
-#endif
-
 import Data.FingerTree
 
 import qualified Data.Sequence as Seq
@@ -115,7 +104,7 @@
 newtype Count = Count { getCount :: Int } deriving
   ( Eq, Ord, Show, Read
 #ifdef LANGUAGE_DeriveDataTypeable
-  , Data, Typeable
+  , Data
 #endif
   )
 
diff --git a/src/Data/Semigroup/Reducer/With.hs b/src/Data/Semigroup/Reducer/With.hs
--- a/src/Data/Semigroup/Reducer/With.hs
+++ b/src/Data/Semigroup/Reducer/With.hs
@@ -1,8 +1,5 @@
 {-# LANGUAGE UndecidableInstances, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances #-}
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702 && __GLASGOW_HASKELL__ < 710
-{-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -19,22 +16,11 @@
   ( WithReducer(..)
   ) where
 
-#if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-#endif
 import Data.FingerTree
-#if __GLASGOW_HASKELL__ < 710
-import Data.Foldable
-import Data.Traversable
-#endif
 import Data.Hashable
-#if __GLASGOW_HASKELL__ < 710
-import Data.Monoid
-#endif
 import Data.Semigroup.Reducer
 import Data.Semigroup.Foldable
 import Data.Semigroup.Traversable
-import Data.Semigroup.Instances ()
 
 -- | If @m@ is a @c@-"Reducer", then m is @(c `WithReducer` m)@-"Reducer"
 --   This can be used to quickly select a "Reducer" for use as a 'FingerTree'
diff --git a/src/Data/Semigroup/Self.hs b/src/Data/Semigroup/Self.hs
--- a/src/Data/Semigroup/Self.hs
+++ b/src/Data/Semigroup/Self.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 
 -----------------------------------------------------------------------------
 -- |
@@ -26,11 +24,6 @@
     ( Self(..)
     )  where
 
-#if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-import Data.Foldable
-import Data.Traversable
-#endif
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup
 #endif
diff --git a/src/Data/Semigroup/Union.hs b/src/Data/Semigroup/Union.hs
--- a/src/Data/Semigroup/Union.hs
+++ b/src/Data/Semigroup/Union.hs
@@ -1,8 +1,6 @@
 {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
-#endif
 module Data.Semigroup.Union
     ( module Data.Semigroup.Reducer
     -- * Unions of Containers
@@ -36,18 +34,12 @@
 import qualified Data.List as List
 
 import Data.Hashable
-#if __GLASGOW_HASKELL__ < 710
-import Data.Functor
-import Data.Foldable
-import Data.Traversable
-#endif
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup
 #endif
 import Data.Semigroup.Foldable
 import Data.Semigroup.Traversable
 import Data.Semigroup.Reducer
-import Data.Semigroup.Instances ()
 
 -- | A Container suitable for the 'Union' 'Monoid'
 class HasUnion f where
