diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 Changes
 =======
 
+Version 3.1.11
+--------------
+
+* Fix compilation with GHC 8.4
+
 Version 3.1.10
 --------------
 
diff --git a/Test/Tasty/Silver.hs b/Test/Tasty/Silver.hs
--- a/Test/Tasty/Silver.hs
+++ b/Test/Tasty/Silver.hs
@@ -58,9 +58,6 @@
 import Test.Tasty.Silver.Advanced
 import qualified Data.ByteString as BS
 import System.Exit
-#if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-#endif
 import qualified Data.Text as T
 import System.Process.Text as PT
 import System.Directory
diff --git a/Test/Tasty/Silver/Advanced.hs b/Test/Tasty/Silver/Advanced.hs
--- a/Test/Tasty/Silver/Advanced.hs
+++ b/Test/Tasty/Silver/Advanced.hs
@@ -18,9 +18,6 @@
 
 import Test.Tasty.Providers
 import Test.Tasty.Silver.Internal
-#if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-#endif
 import qualified Data.Text as T
 
 -- | A very general testing function. Use 'goldenTest1' instead if you can.
diff --git a/Test/Tasty/Silver/Filter.hs b/Test/Tasty/Silver/Filter.hs
--- a/Test/Tasty/Silver/Filter.hs
+++ b/Test/Tasty/Silver/Filter.hs
@@ -25,12 +25,6 @@
 import Data.Maybe
 import Data.Monoid
 import qualified Data.List as L
-#if __GLASGOW_HASKELL__ < 708
-import Data.Foldable (foldMap)
-#endif
-#if __GLASGOW_HASKELL__ < 708
-import Data.Proxy
-#endif
 import Options.Applicative
 import qualified Text.Regex.TDFA.String as RS
 import qualified Text.Regex.TDFA as R
diff --git a/Test/Tasty/Silver/Interactive.hs b/Test/Tasty/Silver/Interactive.hs
--- a/Test/Tasty/Silver/Interactive.hs
+++ b/Test/Tasty/Silver/Interactive.hs
@@ -33,16 +33,11 @@
 import Data.Typeable
 import Data.Tagged
 import Data.Maybe
-import Data.Monoid
+import Data.Monoid hiding ((<>))
+import Data.Semigroup (Semigroup(..))
 import qualified Data.Text.IO as TIO
-#if __GLASGOW_HASKELL__ < 708
-import Data.Foldable (foldMap)
-#endif
 import Data.Char
 import qualified Data.IntMap as IntMap
-#if __GLASGOW_HASKELL__ < 708
-import Data.Proxy
-#endif
 import Control.Monad.State hiding (fail)
 import Control.Monad.STM
 import Control.Monad.Reader hiding (fail)
@@ -291,11 +286,14 @@
   | Skip
   | Seq TestOutput TestOutput
 
+instance Semigroup TestOutput where
+  (<>) = Seq
+
 -- The monoid laws should hold observationally w.r.t. the semantics defined
 -- in this module
 instance Monoid TestOutput where
   mempty = Skip
-  mappend = Seq
+  mappend = (<>)
 
 type Level = Int
 
@@ -580,9 +578,13 @@
   , statDisabled :: !Int
   }
 
+instance Semigroup Statistics where
+  Statistics a1 b1 c1 d1 e1 <> Statistics a2 b2 c2 d2 e2 = Statistics (a1 + a2) (b1 + b2) (c1 + c2) (d1 + d2) (e1 + e2)
+  
+
 instance Monoid Statistics where
-  Statistics a1 b1 c1 d1 e1 `mappend` Statistics a2 b2 c2 d2 e2 = Statistics (a1 + a2) (b1 + b2) (c1 + c2) (d1 + d2) (e1 + e2)
   mempty = Statistics 0 0 0 0 0
+  mappend = (<>)
 
 printStatistics :: (?colors :: Bool) => Statistics -> Time -> IO ()
 printStatistics st time = do
@@ -606,15 +608,15 @@
   | Failed
   | OK
 
-instance Monoid FailureStatus where
-  mappend Failed _ = Failed
-  mappend _ Failed = Failed
-
-  mappend OK OK = OK
-
-  mappend _ _ = Unknown
+instance Semigroup FailureStatus where
+  Failed  <> _      = Failed
+  _       <> Failed = Failed
+  OK      <> OK     = OK
+  _       <> _      = Unknown
 
+instance Monoid FailureStatus where
   mempty = OK
+  mappend = (<>)
 
 -- }}}
 
@@ -743,12 +745,15 @@
   = Maximum a
   | MinusInfinity
 
+instance Ord a => Semigroup (Maximum a) where
+  Maximum a <> Maximum b = Maximum (a `max` b)
+  MinusInfinity <> a = a
+  a <> MinusInfinity = a
+
 instance Ord a => Monoid (Maximum a) where
   mempty = MinusInfinity
+  mappend = (<>)
 
-  Maximum a `mappend` Maximum b = Maximum (a `max` b)
-  MinusInfinity `mappend` a = a
-  a `mappend` MinusInfinity = a
 
 -- | Compute the amount of space needed to align "OK"s and "FAIL"s
 computeAlignment :: OptionSet -> TestTree -> Int
diff --git a/Test/Tasty/Silver/Internal.hs b/Test/Tasty/Silver/Internal.hs
--- a/Test/Tasty/Silver/Internal.hs
+++ b/Test/Tasty/Silver/Internal.hs
@@ -3,9 +3,6 @@
 {-# LANGUAGE CPP #-}
 module Test.Tasty.Silver.Internal where
 
-#if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-#endif
 import Control.Exception
 import Control.Monad.Identity
 import Data.Typeable (Typeable)
diff --git a/tasty-silver.cabal b/tasty-silver.cabal
--- a/tasty-silver.cabal
+++ b/tasty-silver.cabal
@@ -1,5 +1,5 @@
 name:                tasty-silver
-version:             3.1.10
+version:             3.1.11
 synopsis:            A fancy test runner, including support for golden tests.
 description:
   This package provides a fancy test runner and support for «golden testing».
@@ -24,7 +24,7 @@
 build-type:          Simple
 cabal-version:       >=1.14
 extra-source-files:  CHANGELOG.md
-tested-with:         GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1
+tested-with:         GHC == 7.10.3, GHC == 8.0.1, GHC == 8.2.2
 
 Source-repository head
   type:     git
@@ -40,8 +40,8 @@
                        Test.Tasty.Silver.Interactive.Run
                        Test.Tasty.Silver.Internal
 
-  if impl(ghc >= 7.6)
-    ghc-options: -Wall
+  if impl(ghc >= 8.2.2)
+    ghc-options: -Wall -Wcompat -Wno-name-shadowing
 
   build-depends:
     ansi-terminal >= 0.6.2.1,
@@ -57,6 +57,7 @@
     process >= 1.2,
     process-extras >= 0.2,
     regex-tdfa >= 1.2.0,
+    semigroups >= 0.18.3,
     stm >= 2.4.2,
     tagged,
     tasty >= 0.8,
