diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for dependent-map
 
+## Unreleased (0.4.0.1)
+
+* Minimum `base` version is now `4.11` (GHC 8.4.x).
+* Use canonical `mappend`/`(<>)` definitions.
+
 ## 0.4.0.0 - 2020-03-26
 
 * Stop re-exporting `Some(..)`, `GCompare(..)`, and `GOrdering(..)` from `dependent-sum` (which itself re-exports from `some` in some versions).
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-dependent-map [![Build Status](https://travis-ci.org/obsidiansystems/dependent-map.svg)](https://travis-ci.org/obsidiansystems/dependent-map) [![Hackage](https://img.shields.io/hackage/v/dependent-map.svg)](http://hackage.haskell.org/package/dependent-map)
+dependent-map [![Build Status](https://github.com/obsidiansystems/dependent-map/actions/workflows/haskell-ci.yml/badge.svg)](https://github.com/obsidiansystems/dependent-map/actions/workflows/haskell-ci.yml) [![Hackage](https://img.shields.io/hackage/v/dependent-map.svg)](http://hackage.haskell.org/package/dependent-map)
 ==============
 
 This library defines a dependently-typed finite map type. It is derived from `Data.Map.Map` in the `containers` package, but rather than (conceptually) storing pairs indexed by the first component, it stores `DSum`s (from the `dependent-sum` package) indexed by tag. For example
diff --git a/dependent-map.cabal b/dependent-map.cabal
--- a/dependent-map.cabal
+++ b/dependent-map.cabal
@@ -1,13 +1,13 @@
+cabal-version:          3.0
 name:                   dependent-map
-version:                0.4.0.0
+version:                0.4.0.1
 stability:              provisional
 
-cabal-version:          >= 1.6
 build-type:             Simple
 
 author:                 James Cook <mokus@deepbondi.net>
 maintainer:             Obsidian Systems, LLC <maintainer@obsidian.systems>
-license:                OtherLicense
+license:                BSD-3-Clause
 license-file:           LICENSE
 homepage:               https://github.com/obsidiansystems/dependent-map
 
@@ -20,11 +20,16 @@
 extra-source-files: ChangeLog.md
                     README.md
 
-tested-with:            GHC == 8.0.2,
-                        GHC == 8.2.2,
-                        GHC == 8.4.4,
+tested-with:            GHC == 8.4.4,
                         GHC == 8.6.5,
-                        GHC == 8.8.3
+                        GHC == 8.8.4,
+                        GHC == 8.10.7,
+                        GHC == 9.0.2,
+                        GHC == 9.2.8,
+                        GHC == 9.4.8,
+                        GHC == 9.6.5,
+                        GHC == 9.8.2,
+                        GHC == 9.10.1
 
 source-repository head
   type:     git
@@ -37,7 +42,8 @@
                         Data.Dependent.Map.Lens,
                         Data.Dependent.Map.Internal
   other-modules:        Data.Dependent.Map.PtrEquality
-  build-depends:        base >= 4.9 && < 5,
-                        containers >= 0.5.7.1 && <0.7,
+  build-depends:        base >= 4.11 && < 5,
+                        containers >= 0.5.7.1 && <0.8,
                         dependent-sum >= 0.6.1 && < 0.8,
-                        constraints-extras >= 0.2.3.0 && < 0.4
+                        constraints-extras >= 0.2.3.0 && < 0.5
+  default-language:     Haskell2010
diff --git a/src/Data/Dependent/Map.hs b/src/Data/Dependent/Map.hs
--- a/src/Data/Dependent/Map.hs
+++ b/src/Data/Dependent/Map.hs
@@ -155,20 +155,15 @@
 import Text.Read (Lexeme(Ident), lexP, parens, prec, readListPrec,
                   readListPrecDefault, readPrec)
 
-#if !MIN_VERSION_base(4,11,0)
-import Data.Semigroup (Semigroup, (<>))
-#endif
-
 import Data.Dependent.Map.Internal
 import Data.Dependent.Map.PtrEquality (ptrEq)
 
 instance (GCompare k) => Monoid (DMap k f) where
     mempty  = empty
-    mappend = union
     mconcat = unions
 
 instance (GCompare k) => Semigroup (DMap k f) where
-  (<>) = mappend
+  (<>) = union
 
 {--------------------------------------------------------------------
   Operators
