diff --git a/Database/Groundhog/Generic/PersistBackendHelpers.hs b/Database/Groundhog/Generic/PersistBackendHelpers.hs
--- a/Database/Groundhog/Generic/PersistBackendHelpers.hs
+++ b/Database/Groundhog/Generic/PersistBackendHelpers.hs
@@ -32,7 +32,7 @@
 import Control.Monad (liftM)
 import Data.Either (rights)
 import Data.Maybe (catMaybes, fromJust, mapMaybe)
-import Data.Monoid
+import Data.Monoid hiding ((<>))
 
 get :: forall conn v . (PersistBackendConn conn, PersistEntity v, PrimitivePersistField (Key v BackendSpecific))
     => RenderConfig -> (Utf8 -> [PersistValue] -> Action conn (RowStream [PersistValue])) -> Key v BackendSpecific -> Action conn (Maybe v)
diff --git a/Database/Groundhog/Generic/Sql.hs b/Database/Groundhog/Generic/Sql.hs
--- a/Database/Groundhog/Generic/Sql.hs
+++ b/Database/Groundhog/Generic/Sql.hs
@@ -44,12 +44,17 @@
 import Database.Groundhog.Instances ()
 import qualified Blaze.ByteString.Builder.Char.Utf8 as B
 import Data.Maybe (mapMaybe, maybeToList)
-import Data.Monoid
+#if !(MIN_VERSION_base(4,8,0))
+import Data.Monoid hiding ((<>))
+#endif
 import Data.String
 
 import Database.Groundhog.Expression
 
-class (Monoid a, IsString a) => StringLike a where
+-- rely on semigroups package providing Semigroup prior to base-4.9
+import Data.Semigroup as Sem
+
+class (Sem.Semigroup a, Monoid a, IsString a) => StringLike a where
   fromChar :: Char -> a
 
 data RenderS db r = RenderS {
@@ -57,9 +62,14 @@
   , getValues :: [PersistValue] -> [PersistValue]
 }
 
+instance Sem.Semigroup Utf8 where
+  (Utf8 a) <> (Utf8 b) = Utf8 (a <> b)
+
 instance Monoid Utf8 where
   mempty = Utf8 mempty
-  mappend (Utf8 a) (Utf8 b) = Utf8 (mappend a b)
+#if !(MIN_VERSION_base(4,11,0))
+  mappend = (<>)
+#endif
 
 instance IsString Utf8 where
   fromString = Utf8 . B.fromString
@@ -135,9 +145,14 @@
 renderPersistValue (PersistCustom s as) = RenderS s (as++)
 renderPersistValue a = RenderS (fromChar '?') (a:)
 
+instance Sem.Semigroup (RenderS db r) where
+  (RenderS f1 g1) <> (RenderS f2 g2) = RenderS (f1 <> f2) (g1 . g2)
+
 instance Monoid (RenderS db r) where
   mempty = RenderS mempty id
-  (RenderS f1 g1) `mappend` (RenderS f2 g2) = RenderS (f1 `mappend` f2) (g1 . g2)
+#if !(MIN_VERSION_base(4,11,0))
+  mappend = (<>)
+#endif
 
 instance IsString (RenderS db r) where
   fromString s = RenderS (fromString s) id
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+0.9.0
+* Support for GHC 8.4
+
 0.8.0.1
 * New typeclass to allow transaction rollback through ExceptT
 
diff --git a/groundhog.cabal b/groundhog.cabal
--- a/groundhog.cabal
+++ b/groundhog.cabal
@@ -1,5 +1,5 @@
 name:            groundhog
-version:         0.8.0.1
+version:         0.9.0
 license:         BSD3
 license-file:    LICENSE
 author:          Boris Lykah <lykahb@gmail.com>
@@ -33,6 +33,11 @@
                    , resourcet                >= 1.1.2
                    , safe-exceptions
                    , transformers-compat      >= 0.3
+
+    -- See https://prime.haskell.org/wiki/Libraries/Proposals/SemigroupMonoid#Writingcompatiblecode
+    if !impl(ghc >= 8.0)
+      build-depends: semigroups
+
     exposed-modules: Database.Groundhog
                      Database.Groundhog.Core
                      Database.Groundhog.Expression
