diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# hpqtypes-extras-1.6.1.0 (2018-03-18)
+* Add support for GHC 8.4.1.
+* Drop support for GHC 7.8.
+
 # hpqtypes-extras-1.6.0.0 (2018-01-25)
 * Introduce `checkPKPresence` to enforce primary keys on all tables supplied to `checkDatabase`
 * Introduce an options data type, `ExtrasOptions`
diff --git a/hpqtypes-extras.cabal b/hpqtypes-extras.cabal
--- a/hpqtypes-extras.cabal
+++ b/hpqtypes-extras.cabal
@@ -1,5 +1,5 @@
 name:                hpqtypes-extras
-version:             1.6.0.0
+version:             1.6.1.0
 synopsis:            Extra utilities for hpqtypes library
 description:         The following extras for hpqtypes library:
                      .
@@ -20,7 +20,8 @@
 category:            Database
 build-type:          Simple
 cabal-version:       >=1.10
-tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1
+tested-with:         GHC == 7.10.3, GHC == 8.0.2,
+                     GHC == 8.2.2, GHC == 8.4.1
 
 Source-repository head
   Type:     git
@@ -51,6 +52,7 @@
                  , Database.PostgreSQL.PQTypes.Utils.NubList
 
   build-depends: base < 5
+               , hpqtypes >= 1.5.2.0
                , base16-bytestring
                , bytestring
                , containers
@@ -58,12 +60,12 @@
                , data-default
                , exceptions
                , fields-json
-               , hpqtypes >= 1.5.0
                , lifted-base
                , log-base >= 0.7
                , monad-control >= 1.0.0.0
                , mtl
                , safe
+               , semigroups >= 0.16
                , text
                , text-show
 
diff --git a/src/Database/PostgreSQL/PQTypes/Checks/Util.hs b/src/Database/PostgreSQL/PQTypes/Checks/Util.hs
--- a/src/Database/PostgreSQL/PQTypes/Checks/Util.hs
+++ b/src/Database/PostgreSQL/PQTypes/Checks/Util.hs
@@ -20,6 +20,7 @@
 import TextShow
 import qualified Data.List as L
 import qualified Data.Text as T
+import qualified Data.Semigroup as SG
 
 import Database.PostgreSQL.PQTypes.Model
 import Database.PostgreSQL.PQTypes
@@ -27,9 +28,12 @@
 -- | A (potentially empty) list of error messages.
 newtype ValidationResult = ValidationResult [Text]
 
+instance SG.Semigroup ValidationResult where
+  (ValidationResult a) <> (ValidationResult b) = ValidationResult (a ++ b)
+
 instance Monoid ValidationResult where
-  mempty = ValidationResult []
-  mappend (ValidationResult a) (ValidationResult b) = ValidationResult (a ++ b)
+  mempty  = ValidationResult []
+  mappend = (SG.<>)
 
 topMessage :: Text -> Text -> ValidationResult -> ValidationResult
 topMessage objtype objname = \case
diff --git a/src/Database/PostgreSQL/PQTypes/Utils/NubList.hs b/src/Database/PostgreSQL/PQTypes/Utils/NubList.hs
--- a/src/Database/PostgreSQL/PQTypes/Utils/NubList.hs
+++ b/src/Database/PostgreSQL/PQTypes/Utils/NubList.hs
@@ -12,6 +12,7 @@
 
 import qualified Text.Read as R
 import qualified Data.Set as Set
+import qualified Data.Semigroup as SG
 
 {-
   This module is a copy-paste fork of Distribution.Utils.NubList in Cabal
@@ -38,11 +39,17 @@
 overNubList :: Ord a => ([a] -> [a]) -> NubList a -> NubList a
 overNubList f (NubList list) = toNubList . f $ list
 
+instance Ord a => SG.Semigroup (NubList a) where
+    (NubList xs) <> (NubList ys) = NubList $ xs `listUnion` ys
+      where
+        listUnion :: (Ord a) => [a] -> [a] -> [a]
+        listUnion a b = a
+          ++ ordNubBy id (filter (`Set.notMember` (Set.fromList a)) b)
+
+
 instance Ord a => Monoid (NubList a) where
-    mempty = NubList []
-    (NubList xs) `mappend` (NubList ys) = NubList $ xs `listUnion` ys
-      where listUnion :: (Ord a) => [a] -> [a] -> [a]
-            listUnion a b = a ++ (ordNubBy id) (filter (`Set.notMember` (Set.fromList a)) b)
+    mempty  = NubList []
+    mappend = (SG.<>)
 
 instance Show a => Show (NubList a) where
     show (NubList list) = show list
