diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,27 +1,24 @@
-Changelog
-=========
+# Changelog
 
-3.5.0
-------
+## 3.5.1.1
+- GHC 8.8 compatibility.
+
+## 3.5.0
 - Updated to `megaparsec-7`. Our `ParsingError` type alias has changed to match
   Megaparsec's new error model, and `errorBundlePretty` is now exposed instead of
   the old `parseErrorPretty`.
 
-3.4.0.1
----------
+## 3.4.0.1
 - Enhanced the whitespace handling in `semver'`, `version'`, and `mess'`.
 
-3.4.0
-------
+## 3.4.0
 - Removed `ParseV` and surrounding machinery.
   Use `versioning` now instead of the `parseV` function.
 
-3.3.2
-------
+## 3.3.2
 - GHC 8.4.1 compatibility.
 
-3.3.0
-------
+## 3.3.0
 - New `Semantic` typeclass that provides Traversals for SemVer-like data out
   of all the version types. `Text` was also given an instance, so its much
   easier to manipulate directly:
@@ -37,40 +34,33 @@
 - `SemVer` and `Version` should never contain negative values, so their numeric
   components were changed from `Int` to `Word`.
 
-3.2.0
------
+## 3.2.0
 - Updated for `megaparsec-6` and GHC 8.2.
 
-3.1.1
------
+## 3.1.1
 - Added instances for common typeclasses: `Generic`, `NFData`, and
   `Hashable`. This is to avoid having users define these instances themselves
   as orphans. If there are more instances you want added, please let me know.
   `Data` was left out on purpose.
 
-3.1.0
------
+## 3.1.0
 - Added support for *epoch* numbers in the `Version` type. These are numbers
   like the `1:` in `1:2.3.4`. These are used in Arch Linux in rare cases where
   packages change their versioning scheme, but need a reliable integer prefix
   to establish ordering. The `Version` type has been given a new field,
   `_vEpoch :: Maybe Int`, and a corresponding lens, `vEpoch`.
 
-3.0.2
------
+## 3.0.2
 - Expose internal parsers so that they could be used in other parser programs
   that parse version numbers in larger files.
 
-3.0.0
------
+## 3.0.0
 - Updated for `megaparsec-5` and `ghc-8`
 
-2.0.0
------
+## 2.0.0
 - Switched to `megaparsec` to perform all parsing as `Text`
 - Support for legacy `String` removed
 - Added more Traversals and INLINE'd all Lenses/Traversals
 
-1.1.0
------
+## 1.1.0
 - Added Lenses and Traversals (no `lens` dependency)
diff --git a/versions.cabal b/versions.cabal
--- a/versions.cabal
+++ b/versions.cabal
@@ -1,62 +1,66 @@
-cabal-version: 1.12
-
--- This file has been generated from package.yaml by hpack version 0.31.1.
---
--- see: https://github.com/sol/hpack
---
--- hash: 0111f82d056307121e5cb513988396b08a74ec75fc3c29455a1bd6de361afc1c
+cabal-version:      2.2
+name:               versions
+version:            3.5.1.1
+synopsis:           Types and parsers for software version numbers.
+description:
+  A library for parsing and comparing software version numbers. We like to give
+  version numbers to our software in a myriad of ways. Some ways follow strict
+  guidelines for incrementing and comparison. Some follow conventional wisdom
+  and are generally self-consistent. Some are just plain asinine. This library
+  provides a means of parsing and comparing /any/ style of versioning, be it a
+  nice Semantic Version like this:
+  .
+  > 1.2.3-r1+git123
+  .
+  ...or a monstrosity like this:
+  .
+  > 2:10.2+0.0093r3+1-1
+  .
+  Please switch to <http://semver.org Semantic Versioning> if you aren't
+  currently using it. It provides consistency in version incrementing and has
+  the best constraints on comparisons.
 
-name:           versions
-version:        3.5.1
-synopsis:       Types and parsers for software version numbers.
-description:    A library for parsing and comparing software version numbers. We like to give version numbers to our software in a myriad of ways. Some ways follow strict guidelines for incrementing and comparison. Some follow conventional wisdom and are generally self-consistent. Some are just plain asinine. This library provides a means of parsing and comparing /any/ style of versioning, be it a nice Semantic Version like this:
-                .
-                > 1.2.3-r1+git123
-                .
-                ...or a monstrosity like this:
-                .
-                > 2:10.2+0.0093r3+1-1
-                .
-                Please switch to <http://semver.org Semantic Versioning> if you aren't currently using it. It provides consistency in version incrementing and has the best constraints on comparisons.
-category:       Data
-homepage:       https://gitlab.com/fosskers/versions
-author:         Colin Woodbury
-maintainer:     colin@fosskers.ca
-license:        BSD3
-license-file:   LICENSE
-build-type:     Simple
+category:           Data
+homepage:           https://gitlab.com/fosskers/versions
+author:             Colin Woodbury
+maintainer:         colin@fosskers.ca
+license:            BSD-3-Clause
+license-file:       LICENSE
+build-type:         Simple
 extra-source-files:
-    CHANGELOG.md
-    README.md
+  CHANGELOG.md
+  README.md
 
+common commons
+  default-language: Haskell2010
+  ghc-options:
+    -Wall -Wcompat -Wincomplete-record-updates
+    -Wincomplete-uni-patterns
+
+  build-depends:
+    , base        >=4.8 && <4.14
+    , megaparsec  >=7
+    , text        >=1.2
+
 library
-  ghc-options: -Wall -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
+  import:          commons
+  exposed-modules: Data.Versions
   build-depends:
-      base >=4.8 && <4.13
-    , deepseq >=1.4
-    , hashable >=1.2
-    , megaparsec >=7
-    , text >=1.2
-  exposed-modules:
-      Data.Versions
-  default-language: Haskell2010
+    , deepseq   >=1.4
+    , hashable  >=1.2
 
 test-suite versions-test
-  type: exitcode-stdio-1.0
-  main-is: Test.hs
-  hs-source-dirs:
-      test
-  ghc-options: -Wall -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -threaded -with-rtsopts=-N
+  import:         commons
+  type:           exitcode-stdio-1.0
+  main-is:        Test.hs
+  hs-source-dirs: test
+  ghc-options:    -threaded -with-rtsopts=-N
   build-depends:
-      QuickCheck >=2.9
-    , base >=4.8 && <4.13
     , base-prelude
-    , checkers >=0.4
-    , megaparsec >=7
-    , microlens >=0.4
-    , tasty >=0.10.1.2
-    , tasty-hunit >=0.9.2
-    , tasty-quickcheck >=0.8
-    , text >=1.2
+    , checkers          >=0.4
+    , microlens         >=0.4
+    , QuickCheck        >=2.9
+    , tasty             >=0.10.1.2
+    , tasty-hunit       >=0.9.2
+    , tasty-quickcheck  >=0.8
     , versions
-  default-language: Haskell2010
