diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+# 0.3.2.0
+
+Add `Semigroup` instances to prepare for GHC 8.4 and Stackage nightly
+
 # 0.3.1.0
 
 Add `runBeamPostgres` and `runBeamPostgresDebug` functions.
diff --git a/Database/Beam/Postgres.hs b/Database/Beam/Postgres.hs
--- a/Database/Beam/Postgres.hs
+++ b/Database/Beam/Postgres.hs
@@ -48,6 +48,8 @@
 
   , module Database.Beam.Postgres.PgSpecific
 
+  , runBeamPostgres, runBeamPostgresDebug
+
     -- ** Postgres extension support
   , PgExtensionEntity, IsPgExtension(..)
   , pgCreateExtension, pgDropExtension
diff --git a/Database/Beam/Postgres/Conduit.hs b/Database/Beam/Postgres/Conduit.hs
--- a/Database/Beam/Postgres/Conduit.hs
+++ b/Database/Beam/Postgres/Conduit.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE LambdaCase #-}
 
 -- | More efficient query execution functions for @beam-postgres@. These
@@ -24,14 +25,22 @@
 import qualified Data.Conduit as C
 import           Data.Int (Int64)
 import           Data.Maybe (fromMaybe)
-import           Data.Monoid ((<>))
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
+#if MIN_VERSION_conduit(1,3,0)
+#define CONDUIT_TRANSFORMER C.ConduitT
+#else
+#define CONDUIT_TRANSFORMER C.ConduitM
+#endif
+
 -- * @SELECT@
 
 -- | Run a PostgreSQL @SELECT@ statement in any 'MonadIO'.
 runSelect :: ( MonadIO m,  MonadBaseControl IO m, FromBackendRow Postgres a )
           => Pg.Connection -> SqlSelect PgSelectSyntax a
-          -> (C.ConduitT () a m () -> m b) -> m b
+          -> (CONDUIT_TRANSFORMER () a m () -> m b) -> m b
 runSelect conn (SqlSelect (PgSelectSyntax syntax)) withSrc =
   runQueryReturning conn syntax withSrc
 
@@ -50,7 +59,7 @@
 runInsertReturning :: ( MonadIO m,  MonadBaseControl IO m, FromBackendRow Postgres a)
                    => Pg.Connection
                    -> PgInsertReturning a
-                   -> (C.ConduitT () a m () -> m b)
+                   -> (CONDUIT_TRANSFORMER () a m () -> m b)
                    -> m b
 runInsertReturning _ PgInsertReturningEmpty withSrc = withSrc (pure ())
 runInsertReturning conn (PgInsertReturning i) withSrc =
@@ -71,7 +80,7 @@
 runUpdateReturning :: ( MonadIO m, MonadBaseControl IO m, FromBackendRow Postgres a)
                    => Pg.Connection
                    -> PgUpdateReturning a
-                   -> (C.ConduitT () a m () -> m b)
+                   -> (CONDUIT_TRANSFORMER () a m () -> m b)
                    -> m b
 runUpdateReturning _ PgUpdateReturningEmpty withSrc = withSrc (pure ())
 runUpdateReturning conn (PgUpdateReturning u) withSrc =
@@ -91,7 +100,7 @@
 -- 'MonadIO' and get a 'C.Source' of the deleted rows.
 runDeleteReturning :: ( MonadIO m, MonadBaseControl IO m, FromBackendRow Postgres a )
                    => Pg.Connection -> PgDeleteReturning a
-                   -> (C.ConduitT () a m () -> m b) -> m b
+                   -> (CONDUIT_TRANSFORMER () a m () -> m b) -> m b
 runDeleteReturning conn (PgDeleteReturning d) withSrc =
   runQueryReturning conn d withSrc
 
@@ -108,7 +117,7 @@
 runQueryReturning
   :: ( MonadIO m, MonadBaseControl IO m, Functor m, FromBackendRow Postgres r )
   => Pg.Connection -> PgSyntax
-  -> (C.ConduitT () r m () -> m b)
+  -> (CONDUIT_TRANSFORMER () r m () -> m b)
   -> m b
 runQueryReturning conn x withSrc = do
   success <- liftIO $ do
diff --git a/Database/Beam/Postgres/Connection.hs b/Database/Beam/Postgres/Connection.hs
--- a/Database/Beam/Postgres/Connection.hs
+++ b/Database/Beam/Postgres/Connection.hs
@@ -9,6 +9,7 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE CPP #-}
 
 module Database.Beam.Postgres.Connection
   ( PgRowReadError(..), PgError(..)
@@ -55,11 +56,13 @@
 import           Data.ByteString (ByteString)
 import           Data.ByteString.Builder (toLazyByteString, byteString)
 import qualified Data.ByteString.Lazy as BL
-import           Data.Monoid
 import           Data.Proxy
 import           Data.String
 import qualified Data.Text as T
 import           Data.Text.Encoding (decodeUtf8)
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
 import           Foreign.C.Types
 
diff --git a/Database/Beam/Postgres/Extensions.hs b/Database/Beam/Postgres/Extensions.hs
--- a/Database/Beam/Postgres/Extensions.hs
+++ b/Database/Beam/Postgres/Extensions.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE CPP #-}
 
 -- | Postgres extensions are run-time loadable plugins that can extend Postgres
 -- functionality. Extensions are part of the database schema.
@@ -23,9 +24,11 @@
 import           Data.Aeson
 import qualified Data.HashSet as HS
 import           Data.Hashable (Hashable)
-import           Data.Monoid
 import           Data.Proxy
 import           Data.Text (Text)
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
 -- *** Embedding extensions in databases
 
diff --git a/Database/Beam/Postgres/Full.hs b/Database/Beam/Postgres/Full.hs
--- a/Database/Beam/Postgres/Full.hs
+++ b/Database/Beam/Postgres/Full.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE TupleSections #-}
+{-# LANGUAGE CPP #-}
 
 -- | Module providing (almost) full support for Postgres query and data
 -- manipulation statements. These functions shadow the functions in
@@ -51,8 +52,10 @@
 
 import           Control.Monad.Free.Church
 
-import           Data.Monoid ((<>))
 import qualified Data.Text as T
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
 -- * @SELECT@
 
diff --git a/Database/Beam/Postgres/Migrate.hs b/Database/Beam/Postgres/Migrate.hs
--- a/Database/Beam/Postgres/Migrate.hs
+++ b/Database/Beam/Postgres/Migrate.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE CPP #-}
 {-# OPTIONS_GHC -fno-warn-orphans -fno-warn-type-defaults #-}
 
 -- | Migrations support for beam-postgres. See "Database.Beam.Migrate" for more
@@ -56,14 +57,16 @@
 import           Data.ByteString (ByteString)
 import qualified Data.ByteString.Lazy as BL
 import qualified Data.ByteString.Lazy.Char8 as BCL
-import           Data.Monoid
 import           Data.String
 import           Data.Int
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as TE
 import qualified Data.Vector as V
-import           Data.UUID (UUID)
+import           Data.UUID.Types (UUID)
 import           Data.Typeable
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
 -- | Top-level migration backend for use by @beam-migrate@ tools
 migrationBackend :: Tool.BeamMigrationBackend PgCommandSyntax Postgres Pg.Connection Pg
@@ -176,7 +179,7 @@
       | Pg.typoid Pg.uuid        == oid ->
           Just $ HsDataType (hsVarFrom "uuid" "Database.Beam.Postgres")
                             (HsType (tyConNamed "UUID")
-                                    (importSome "Data.UUID" [importTyNamed "UUID"]))
+                                    (importSome "Data.UUID.Types" [importTyNamed "UUID"]))
                             (pgDataTypeSerialized pgUuidType)
       | Pg.typoid Pg.money       == oid ->
           Just $ HsDataType (hsVarFrom "money" "Database.Beam.Postgres")
diff --git a/Database/Beam/Postgres/PgCrypto.hs b/Database/Beam/Postgres/PgCrypto.hs
--- a/Database/Beam/Postgres/PgCrypto.hs
+++ b/Database/Beam/Postgres/PgCrypto.hs
@@ -14,7 +14,7 @@
 import Data.Text (Text)
 import Data.ByteString (ByteString)
 import Data.Vector (Vector)
-import Data.UUID (UUID)
+import Data.UUID.Types (UUID)
 
 type PgExpr ctxt s = QGenExpr ctxt PgExpressionSyntax s
 
diff --git a/Database/Beam/Postgres/PgSpecific.hs b/Database/Beam/Postgres/PgSpecific.hs
--- a/Database/Beam/Postgres/PgSpecific.hs
+++ b/Database/Beam/Postgres/PgSpecific.hs
@@ -8,6 +8,7 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE CPP #-}
 
 -- | Postgres-specific types, functions, and operators
 module Database.Beam.Postgres.PgSpecific
@@ -97,7 +98,6 @@
 import qualified Data.ByteString.Lazy as BL
 import           Data.Foldable
 import           Data.Hashable
-import           Data.Monoid
 import           Data.Proxy
 import           Data.Scientific (Scientific, formatScientific, FPFormat(Fixed))
 import           Data.String
@@ -105,6 +105,9 @@
 import           Data.Time (LocalTime)
 import           Data.Type.Bool
 import qualified Data.Vector as V
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
 import qualified Database.PostgreSQL.Simple.FromField as Pg
 import qualified Database.PostgreSQL.Simple.ToField as Pg
diff --git a/Database/Beam/Postgres/Syntax.hs b/Database/Beam/Postgres/Syntax.hs
--- a/Database/Beam/Postgres/Syntax.hs
+++ b/Database/Beam/Postgres/Syntax.hs
@@ -108,16 +108,19 @@
 import           Data.Hashable
 import           Data.Int
 import           Data.Maybe
-import           Data.Monoid
 import           Data.Scientific (Scientific)
 import           Data.String (IsString(..), fromString)
+import           Data.Tagged
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as TE
 import qualified Data.Text.Lazy as TL
 import           Data.Time (LocalTime, UTCTime, ZonedTime, TimeOfDay, NominalDiffTime, Day)
-import           Data.UUID (UUID)
+import           Data.UUID.Types (UUID)
 import qualified Data.Vector as V
 import           Data.Word
+#if !MIN_VERSION_base(4, 11, 0)
+import           Data.Semigroup
+#endif
 
 import qualified Database.PostgreSQL.Simple.ToField as Pg
 import qualified Database.PostgreSQL.Simple.TypeInfo.Static as Pg
@@ -174,6 +177,9 @@
 newtype PgSyntax
   = PgSyntax { buildPgSyntax :: PgSyntaxM () }
 
+instance Semigroup PgSyntax where
+  (<>) = mappend
+
 instance Monoid PgSyntax where
   mempty = PgSyntax (pure ())
   mappend a b = PgSyntax (buildPgSyntax a >> buildPgSyntax b)
@@ -620,7 +626,7 @@
 instance IsCustomSqlSyntax PgExpressionSyntax where
   newtype CustomSqlSyntax PgExpressionSyntax =
     PgCustomExpressionSyntax { fromPgCustomExpression :: PgSyntax }
-    deriving Monoid
+    deriving (Monoid, Semigroup)
   customExprSyntax = PgExpressionSyntax . fromPgCustomExpression
   renderSyntax = PgCustomExpressionSyntax . pgParens . fromPgExpression
 
@@ -1372,3 +1378,8 @@
 PG_HAS_EQUALITY_CHECK(V.Vector a)
 PG_HAS_EQUALITY_CHECK(CI T.Text)
 PG_HAS_EQUALITY_CHECK(CI TL.Text)
+
+instance HasSqlEqualityCheck PgExpressionSyntax a =>
+  HasSqlEqualityCheck PgExpressionSyntax (Tagged t a)
+instance HasSqlQuantifiedEqualityCheck PgExpressionSyntax a =>
+  HasSqlQuantifiedEqualityCheck PgExpressionSyntax (Tagged t a)
diff --git a/Database/Beam/Postgres/Types.hs b/Database/Beam/Postgres/Types.hs
--- a/Database/Beam/Postgres/Types.hs
+++ b/Database/Beam/Postgres/Types.hs
@@ -29,7 +29,7 @@
 import           Data.Text (Text)
 import qualified Data.Text.Lazy as TL
 import           Data.Time (UTCTime, Day, TimeOfDay, LocalTime, ZonedTime(..))
-import           Data.UUID (UUID)
+import           Data.UUID.Types (UUID)
 import           Data.Vector (Vector)
 import           Data.Word
 
diff --git a/beam-postgres.cabal b/beam-postgres.cabal
--- a/beam-postgres.cabal
+++ b/beam-postgres.cabal
@@ -1,5 +1,5 @@
 name:                 beam-postgres
-version:              0.3.1.0
+version:              0.3.2.0
 synopsis:             Connection layer between beam and postgres
 description:          Beam driver for <https://www.postgresql.org/ PostgreSQL>, an advanced open-source RDBMS
 homepage:             http://tathougies.github.io/beam/user-guide/backends/beam-postgres
@@ -44,12 +44,13 @@
                       mtl                  >=2.1  && <2.3,
                       conduit              >=1.2  && <1.4,
                       aeson                >=0.11 && <1.3,
-                      uuid                 >=1.2  && <1.4,
+                      uuid-types           >=1.0  && <1.1,
                       case-insensitive     >=1.2  && <1.3,
                       scientific           >=0.3  && <0.4,
                       vector               >=0.11 && <0.13,
                       network-uri          >=2.6  && <2.7,
                       unordered-containers >= 0.2 && <0.3,
+                      tagged               >=0.8  && <0.9,
 
                       haskell-src-exts     >=1.18 && <1.21
   default-language:   Haskell2010
