diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# unjson-0.15.2.0 (2018-03-18)
+* GHC 8.4.1 support.
+
 # unjson-0.15.1.0 (2018-03-05)
 * -Wall police.
 * API addition: arrayWithModeOf'.
diff --git a/src/Data/Unjson.hs b/src/Data/Unjson.hs
--- a/src/Data/Unjson.hs
+++ b/src/Data/Unjson.hs
@@ -157,18 +157,19 @@
 import qualified Data.Aeson.Types as Aeson
 import qualified Data.ByteString.Lazy as BSL
 import qualified Data.ByteString.Lazy.Builder as Builder
+import qualified Data.HashSet as HashSet
+import qualified Data.IntMap as IntMap
+import qualified Data.IntSet as IntSet
+import qualified Data.Map as Map
+import qualified Data.Semigroup as SG
+import qualified Data.Set as Set
 import qualified Data.Text as Text
 import qualified Data.Text.Lazy as LazyText
 import qualified Data.Vector as Vector
+import qualified Data.Vector.Generic
+import qualified Data.Vector.Primitive
 import qualified Data.Vector.Storable
 import qualified Data.Vector.Unboxed
-import qualified Data.Vector.Primitive
-import qualified Data.Vector.Generic
-import qualified Data.Map as Map
-import qualified Data.Set as Set
-import qualified Data.IntMap as IntMap
-import qualified Data.IntSet as IntSet
-import qualified Data.HashSet as HashSet
 import Data.Typeable
 import Data.Data
 import Data.Maybe
@@ -218,7 +219,7 @@
 -- indexes into \"key\", then into \"key2\" then into index 34 of an
 -- array.
 newtype Path = Path [PathElem]
-  deriving (Eq, Ord, Typeable, Monoid)
+  deriving (Eq, Ord, Typeable, SG.Semigroup, Monoid)
 
 instance Show Path where
   show (Path p) = Text.unpack (showPath True p)
diff --git a/unjson.cabal b/unjson.cabal
--- a/unjson.cabal
+++ b/unjson.cabal
@@ -1,5 +1,5 @@
 name:                unjson
-version:             0.15.1.0
+version:             0.15.2.0
 synopsis:            Bidirectional JSON parsing and generation.
 description:         Bidirectional JSON parsing and generation
                      with automatic documentation support.
@@ -16,7 +16,7 @@
 extra-source-files:  README.md, CHANGELOG.md
 cabal-version:       >=1.18
 tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2,
-                     GHC == 8.2.2
+                     GHC == 8.2.2, GHC == 8.4.1
 
 source-repository head
   type:     git
@@ -25,17 +25,28 @@
 source-repository this
   type:     git
   location: https://github.com/scrive/unjson.git
-  tag:      0.15.1.0
+  tag:      0.15.2.0
 
 library
   exposed-modules:     Data.Unjson
   -- other-modules:
   -- other-extensions:
-  build-depends:       base >= 4.7 && < 5, text, aeson >= 1.0 && < 1.3,
-                       free, scientific, attoparsec,
-                       unordered-containers, vector, pretty,
-                       bytestring >= 0.10, containers, hashable,
-                       primitive, time, invariant
+  build-depends:       base >= 4.7 && < 5,
+                       aeson >= 1.0 && < 1.4,
+                       attoparsec,
+                       bytestring >= 0.10,
+                       containers,
+                       free,
+                       hashable,
+                       invariant,
+                       pretty,
+                       primitive,
+                       scientific,
+                       semigroups >= 0.16,
+                       text,
+                       time,
+                       unordered-containers,
+                       vector
   hs-source-dirs:      src
   ghc-options:         -Wall
   default-language:    Haskell2010
