diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+- 0.8.4.0 (2017-07-18)
+    * GHC 8.4 support
+    * Bump `containers` to 0.6
+    * Bump `time` to 1.9
+    * Bump `QuickCheck` to 2.11
+
 - 0.8.3.0 (2017-12-26)
     * Fix input element values for choice forms
     * Bump `time` to 1.8
diff --git a/digestive-functors.cabal b/digestive-functors.cabal
--- a/digestive-functors.cabal
+++ b/digestive-functors.cabal
@@ -1,5 +1,5 @@
 Name:     digestive-functors
-Version:  0.8.3.0
+Version:  0.8.4.0
 Synopsis: A practical formlet library
 
 Description:
@@ -61,13 +61,14 @@
     Text.Digestive.Form.Internal.Field
 
   Build-depends:
-    base       >= 4       && < 5,
-    bytestring >= 0.9     && < 0.11,
-    containers >= 0.3     && < 0.6,
-    mtl        >= 1.1.0.0 && < 3,
-    old-locale >= 1.0     && < 1.1,
-    text       >= 0.10    && < 1.3,
-    time       >= 1.4     && < 1.9
+    base                  >= 4       && < 5,
+    bytestring            >= 0.9     && < 0.11,
+    containers            >= 0.3     && < 0.7,
+    mtl                   >= 1.1.0.0 && < 3,
+    old-locale            >= 1.0     && < 1.1,
+    semigroups            >= 0.16    && < 0.19,
+    text                  >= 0.10    && < 1.3,
+    time                  >= 1.4     && < 1.10
   Extensions: CPP
 
 Test-suite digestive-functors-tests
@@ -98,18 +99,19 @@
 
   Build-depends:
     HUnit                      >= 1.2 && < 1.7,
-    QuickCheck                 >= 2.5 && < 2.11,
+    QuickCheck                 >= 2.5 && < 2.12,
     test-framework             >= 0.4 && < 0.9,
     test-framework-hunit       >= 0.3 && < 0.4,
     test-framework-quickcheck2 >= 0.3 && < 0.4,
     -- Copied from regular dependencies:
-    base       >= 4       && < 5,
-    bytestring >= 0.9     && < 0.11,
-    containers >= 0.3     && < 0.6,
-    mtl        >= 1.1.0.0 && < 3,
-    old-locale >= 1.0     && < 1.1,
-    text       >= 0.10    && < 1.3,
-    time       >= 1.4     && < 1.9
+    base                  >= 4       && < 5,
+    bytestring            >= 0.9     && < 0.11,
+    containers            >= 0.3     && < 0.7,
+    mtl                   >= 1.1.0.0 && < 3,
+    old-locale            >= 1.0     && < 1.1,
+    semigroups            >= 0.16    && < 0.19,
+    text                  >= 0.10    && < 1.3,
+    time                  >= 1.4     && < 1.10
 
 Source-repository head
   Type:     git
diff --git a/src/Text/Digestive/Form.hs b/src/Text/Digestive/Form.hs
--- a/src/Text/Digestive/Form.hs
+++ b/src/Text/Digestive/Form.hs
@@ -81,6 +81,7 @@
 #if !MIN_VERSION_time(1,5,0)
 import           System.Locale
 #endif
+import           Prelude
 
 
 --------------------------------------------------------------------------------
diff --git a/src/Text/Digestive/Form/Encoding.hs b/src/Text/Digestive/Form/Encoding.hs
--- a/src/Text/Digestive/Form/Encoding.hs
+++ b/src/Text/Digestive/Form/Encoding.hs
@@ -13,6 +13,7 @@
 import           Control.Monad.Identity             (Identity)
 import           Data.Maybe                         (mapMaybe)
 import           Data.Monoid                        (Monoid (..), mconcat)
+import           Data.Semigroup                     (Semigroup (..))
 
 
 --------------------------------------------------------------------------------
@@ -37,12 +38,19 @@
 
 
 --------------------------------------------------------------------------------
+-- Semigroup instance for encoding types: prefer UrlEncoded, but fallback to
+-- MultiPart when needed
+instance Semigroup FormEncType where
+    UrlEncoded <> x = x
+    MultiPart  <> _ = MultiPart
+
+
+--------------------------------------------------------------------------------
 -- Monoid instance for encoding types: prefer UrlEncoded, but fallback to
 -- MultiPart when needed
 instance Monoid FormEncType where
-    mempty               = UrlEncoded
-    mappend UrlEncoded x = x
-    mappend MultiPart  _ = MultiPart
+    mempty  = UrlEncoded
+    mappend = (<>)
 
 
 --------------------------------------------------------------------------------
