diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,8 @@
 # This Travis job script has been generated by a script via
 #
-#   runghc make_travis_yml_2.hs '-o' '.travis.yml' '--ghc-head' '--irc-channel=irc.freenode.org#haskell-lens' '--no-no-tests-no-bench' '--no-unconstrained' 'cabal.project'
+#   runghc make_travis_yml_2.hs '-o' '.travis.yml' '--ghc-head' '--irc-channel=irc.freenode.org#haskell-lens' '--no-no-tests-no-bench' '--no-unconstrained' '--allow-failure=7.0.4' '--allow-failure=7.2.2' 'cabal.project'
 #
-# For more information, see https://github.com/hvr/multi-ghc-travis
+# For more information, see https://github.com/haskell-CI/haskell-ci
 #
 language: c
 sudo: false
@@ -36,36 +36,36 @@
 
 matrix:
   include:
-    - compiler: "ghc-8.6.1"
-      env: GHCHEAD=true
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.6.1], sources: [hvr-ghc]}}
-    - compiler: "ghc-8.4.3"
+    - compiler: "ghc-8.6.3"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-8.4.3], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.3], sources: [hvr-ghc]}}
+    - compiler: "ghc-8.4.4"
+    # env: TEST=--disable-tests BENCH=--disable-benchmarks
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4], sources: [hvr-ghc]}}
     - compiler: "ghc-8.2.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-8.2.2], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.2.2], sources: [hvr-ghc]}}
     - compiler: "ghc-8.0.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-8.0.2], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.0.2], sources: [hvr-ghc]}}
     - compiler: "ghc-7.10.3"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.10.3], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.10.3], sources: [hvr-ghc]}}
     - compiler: "ghc-7.8.4"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.8.4], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.8.4], sources: [hvr-ghc]}}
     - compiler: "ghc-7.6.3"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.6.3], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.6.3], sources: [hvr-ghc]}}
     - compiler: "ghc-7.4.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.4.2], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.4.2], sources: [hvr-ghc]}}
     - compiler: "ghc-7.2.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.2.2], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.2.2], sources: [hvr-ghc]}}
     - compiler: "ghc-7.0.4"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.2,ghc-7.0.4], sources: [hvr-ghc]}}
+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-7.0.4], sources: [hvr-ghc]}}
     - compiler: "ghc-head"
       env: GHCHEAD=true
       addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-head], sources: [hvr-ghc]}}
@@ -74,7 +74,6 @@
     - compiler: "ghc-head"
     - compiler: "ghc-7.0.4"
     - compiler: "ghc-7.2.2"
-    - compiler: "ghc-8.6.1"
 
 before_install:
   - HC=${CC}
@@ -118,8 +117,9 @@
     fi
   - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
   - "printf 'packages: \".\"\\n' > cabal.project"
+  - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
   - touch cabal.project.local
-  - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
+  - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg  | grep -vw -- semigroupoids | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
   - cat cabal.project || true
   - cat cabal.project.local || true
   - if [ -f "./configure.ac" ]; then
@@ -134,13 +134,14 @@
 # any command which exits with a non-zero exit code causes the build to fail.
 script:
   # test that source-distributions can be generated
-  - (cd "." && cabal sdist)
-  - mv "."/dist/semigroupoids-*.tar.gz ${DISTDIR}/
+  - cabal new-sdist all
+  - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
   - cd ${DISTDIR} || false
   - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
   - "printf 'packages: semigroupoids-*/*.cabal\\n' > cabal.project"
+  - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
   - touch cabal.project.local
-  - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
+  - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg  | grep -vw -- semigroupoids | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
   - cat cabal.project || true
   - cat cabal.project.local || true
 
@@ -152,8 +153,7 @@
   - (cd semigroupoids-* && cabal check)
 
   # haddock
-  - rm -rf ./dist-newstyle
   - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
 
-# REGENDATA ["-o",".travis.yml","--ghc-head","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-unconstrained","cabal.project"]
+# REGENDATA ["-o",".travis.yml","--ghc-head","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-unconstrained","--allow-failure=7.0.4","--allow-failure=7.2.2","cabal.project"]
 # EOF
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,9 @@
+5.3.2 [2019.01.04]
+------------------
+* Bump the lower bound on `semigroups` to 0.16.2, and avoid incurring
+  the dependency entirely on recent GHCs.
+* Fix the build on GHC 7.0 and 7.2.
+
 5.3.1 [2018.07.02]
 ------------------
 * Fix a regression introduced in `semigroupoids-5.3` in which some modules
diff --git a/semigroupoids.cabal b/semigroupoids.cabal
--- a/semigroupoids.cabal
+++ b/semigroupoids.cabal
@@ -1,6 +1,6 @@
 name:          semigroupoids
 category:      Control, Comonads
-version:       5.3.1
+version:       5.3.2
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -18,8 +18,8 @@
              , GHC == 7.10.3
              , GHC == 8.0.2
              , GHC == 8.2.2
-             , GHC == 8.4.3
-             , GHC == 8.6.1
+             , GHC == 8.4.4
+             , GHC == 8.6.3
 build-type:    Custom
 synopsis:      Semigroupoids: Category sans id
 extra-source-files:
@@ -140,7 +140,6 @@
     base                >= 4.3     && < 5,
     base-orphans        >= 0.8     && < 1,
     bifunctors          >= 5       && < 6,
-    semigroups          >= 0.8.3.1 && < 1,
     template-haskell,
     transformers        >= 0.2     && < 0.6,
     transformers-compat >= 0.5     && < 0.7
@@ -150,6 +149,9 @@
 
   if impl(ghc >= 7.2 && < 7.6)
     build-depends: ghc-prim
+
+  if !impl(ghc >= 8.0)
+    build-depends: semigroups >= 0.16.2 && < 1
 
   if flag(containers)
     build-depends: containers >= 0.3 && < 0.7
diff --git a/src/Data/Functor/Bind/Class.hs b/src/Data/Functor/Bind/Class.hs
--- a/src/Data/Functor/Bind/Class.hs
+++ b/src/Data/Functor/Bind/Class.hs
@@ -6,10 +6,6 @@
 {-# LANGUAGE EmptyCase #-}
 #endif
 
-#ifndef MIN_VERSION_semigroups
-#define MIN_VERSION_semigroups(x,y,z) 1
-#endif
-
 #if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Trustworthy #-}
 #endif
@@ -86,9 +82,8 @@
 import Data.Functor.Extend
 import Data.List.NonEmpty
 import Data.Semigroup as Semigroup
-import Data.Monoid as Monoid hiding ((<>))
+import qualified Data.Monoid as Monoid
 import Data.Orphans ()
-import GHC.Generics as Generics
 import Language.Haskell.TH (Q)
 import Prelude hiding (id, (.))
 
@@ -126,6 +121,12 @@
 import qualified Data.HashMap.Lazy as HashMap
 #endif
 
+#ifdef MIN_VERSION_generic_deriving
+import Generics.Deriving.Base as Generics
+#else
+import GHC.Generics as Generics
+#endif
+
 #ifdef MIN_VERSION_comonad
 import Control.Comonad
 import Control.Comonad.Trans.Env
@@ -687,7 +688,7 @@
 instance Bind Monoid.Last where (>>-) = (>>=)
 #if MIN_VERSION_base(4,8,0)
 instance Bind f => Bind (Monoid.Alt f) where
-  Alt m >>- k = Alt (m >>- getAlt . k)
+  Monoid.Alt m >>- k = Monoid.Alt (m >>- Monoid.getAlt . k)
 #endif
 -- in GHC 8.6 we'll have to deal with Bind f => Bind (Ap f) the same way
 instance Bind Semigroup.First where (>>-) = (>>=)
@@ -726,11 +727,9 @@
   (f, g) <<.>> (a, b) = (f a, g b)
   {-# INLINE (<<.>>) #-}
 
-#if MIN_VERSION_semigroups(0,16,2)
 instance Biapply Arg where
   Arg f g <<.>> Arg a b = Arg (f a) (g b)
   {-# INLINE (<<.>>) #-}
-#endif
 
 instance Semigroup x => Biapply ((,,) x) where
   (x, f, g) <<.>> (x', a, b) = (x <> x', f a, g b)
diff --git a/src/Data/Functor/Extend.hs b/src/Data/Functor/Extend.hs
--- a/src/Data/Functor/Extend.hs
+++ b/src/Data/Functor/Extend.hs
@@ -54,9 +54,14 @@
 import Data.Proxy
 #endif
 
-import Data.Orphans ()
+#ifdef MIN_VERSION_generic_deriving
+import Generics.Deriving.Base as Generics
+#else
 import GHC.Generics as Generics
-import Data.Monoid as Monoid hiding ((<>))
+#endif
+
+import Data.Orphans ()
+import qualified Data.Monoid as Monoid
 import Data.Semigroup as Semigroup
 
 class Functor w => Extend w where
diff --git a/src/Data/Semigroup/Foldable/Class.hs b/src/Data/Semigroup/Foldable/Class.hs
--- a/src/Data/Semigroup/Foldable/Class.hs
+++ b/src/Data/Semigroup/Foldable/Class.hs
@@ -4,10 +4,6 @@
 {-# LANGUAGE Trustworthy #-}
 #endif
 
-#ifndef MIN_VERSION_semigroups
-#define MIN_VERSION_semigroups(x,y,z) 0
-#endif
-
 -----------------------------------------------------------------------------
 -- |
 -- Copyright   :  (C) 2011-2015 Edward Kmett
@@ -59,7 +55,7 @@
 import Data.Tree
 #endif
 
-import Data.Monoid as Monoid hiding ((<>))
+import qualified Data.Monoid as Monoid
 import Data.Semigroup as Semigroup hiding (Product, Sum)
 import Data.Orphans ()
 -- import Data.Ord -- missing Foldable, https://ghc.haskell.org/trac/ghc/ticket/15098#ticket
@@ -92,7 +88,7 @@
 
 #if MIN_VERSION_base(4,8,0)
 instance Foldable1 f => Foldable1 (Monoid.Alt f) where
-  foldMap1 g (Alt m) = foldMap1 g m
+  foldMap1 g (Monoid.Alt m) = foldMap1 g m
 #endif
 
 instance Foldable1 Semigroup.First where
@@ -138,10 +134,8 @@
   bifoldMap1 f g = maybe (error "bifoldMap1") id . getOption . bifoldMap (Option . Just . f) (Option . Just . g)
   {-# INLINE bifoldMap1 #-}
 
-#if MIN_VERSION_semigroups(0,16,2)
 instance Bifoldable1 Arg where
   bifoldMap1 f g (Arg a b) = f a <> g b
-#endif
 
 instance Bifoldable1 Either where
   bifoldMap1 f _ (Left a) = f a
diff --git a/src/Data/Semigroup/Traversable/Class.hs b/src/Data/Semigroup/Traversable/Class.hs
--- a/src/Data/Semigroup/Traversable/Class.hs
+++ b/src/Data/Semigroup/Traversable/Class.hs
@@ -40,7 +40,7 @@
 import Data.Functor.Reverse
 import Data.Functor.Sum as Functor
 import Data.List.NonEmpty (NonEmpty(..))
-import Data.Monoid as Monoid hiding ((<>))
+import qualified Data.Monoid as Monoid
 import Data.Orphans ()
 import Data.Semigroup as Semigroup
 import Data.Semigroup.Foldable
@@ -80,10 +80,8 @@
   {-# MINIMAL bitraverse1 | bisequence1 #-}
 #endif
 
-#if MIN_VERSION_semigroups(0,16,2)
 instance Bitraversable1 Arg where
   bitraverse1 f g (Arg a b) = Arg <$> f a <.> g b
-#endif
 
 instance Bitraversable1 Either where
   bitraverse1 f _ (Left a) = Left <$> f a
@@ -249,7 +247,7 @@
 
 #if MIN_VERSION_base(4,8,0)
 instance Traversable1 f => Traversable1 (Monoid.Alt f) where
-  traverse1 g (Alt m) = Alt <$> traverse1 g m
+  traverse1 g (Monoid.Alt m) = Monoid.Alt <$> traverse1 g m
 #endif
 
 instance Traversable1 Semigroup.First where
