diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,6 @@
+* _v0.8.4_  
+	Support GHC 8.
+
 * _v0.8.3_  
 	A pure version of `buildRequest` is now available as `buildRequest1`.
 	Support for connecting to Unix domain sockets has been added.
diff --git a/http-streams.cabal b/http-streams.cabal
--- a/http-streams.cabal
+++ b/http-streams.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >= 1.10
 name:                http-streams
-version:             0.8.3.3
+version:             0.8.4.0
 synopsis:            An HTTP client using io-streams
 description:
  /Overview/
@@ -17,9 +17,9 @@
 license-file:        LICENCE
 author:              Andrew Cowie <andrew@operationaldynamics.com>
 maintainer:          Andrew Cowie <andrew@operationaldynamics.com>
-copyright:           © 2012-2015 Operational Dynamics Consulting, Pty Ltd and Others
+copyright:           © 2012-2016 Operational Dynamics Consulting, Pty Ltd and Others
 category:            Web, IO-Streams
-tested-with:         GHC == 7.8
+tested-with:         GHC == 7.10.3, GHC == 8.0.1
 stability:           experimental
 homepage:            http://research.operationaldynamics.com/projects/http-streams/
 bug-reports:         https://github.com/afcowie/http-streams/issues
@@ -48,7 +48,6 @@
   default-language:  Haskell2010
 
   build-depends:     attoparsec,
-                     http-common >= 0.8.2,
                      base >= 4 && <5,
                      directory,
                      base64-bytestring,
@@ -62,7 +61,8 @@
                      transformers,
                      text,
                      unordered-containers,
-                     aeson
+                     aeson,
+                     http-common >= 0.8.2
   if flag(network-uri)
     build-depends: network-uri >= 2.6, network >= 2.6
   else
@@ -86,7 +86,7 @@
 
   include-dirs:      .
 
-  ghc-prof-options:  -prof -fprof-auto-top
+  ghc-prof-options:  -fprof-auto-top
 
 
 test-suite           check
@@ -95,10 +95,9 @@
   default-language:  Haskell2010
 
   build-depends:
-                     http-common >= 0.8.2,
                      HUnit,
                      HsOpenSSL,
-                     MonadCatchIO-transformers,
+                     lifted-base,
                      aeson-pretty,
                      attoparsec,
                      base,
@@ -116,15 +115,15 @@
                      network >= 2.6,
                      network-uri >= 2.6,
                      openssl-streams >= 1.1    && < 1.4,
-                     snap-core       >= 0.9    && < 1.0,
-                     snap-server     >= 0.9    && < 1.0,
+                     snap-core       >= 1.0    && < 1.1,
+                     snap-server     >= 1.0    && < 1.1,
                      system-fileio   >= 0.3.10 && < 0.4,
                      system-filepath >= 0.4.1  && < 0.5,
                      text,
                      unordered-containers,
                      aeson,
                      http-common  >= 0.8.2,
-                     http-streams >= 0.8.2
+                     http-streams >= 0.8.4
 
   hs-source-dirs:    lib,tests
   main-is:           check.hs
diff --git a/lib/Network/Http/Connection.hs b/lib/Network/Http/Connection.hs
--- a/lib/Network/Http/Connection.hs
+++ b/lib/Network/Http/Connection.hs
@@ -9,6 +9,7 @@
 -- the BSD licence.
 --
 
+{-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DoAndIfThenElse    #-}
 {-# LANGUAGE OverloadedStrings  #-}
@@ -43,7 +44,6 @@
 import Control.Exception (bracket)
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Char8 as S
-import Data.Monoid (mappend, mempty)
 import Network.Socket
 import OpenSSL (withOpenSSL)
 import OpenSSL.Session (SSL, SSLContext)
@@ -51,6 +51,10 @@
 import System.IO.Streams (InputStream, OutputStream, stdout)
 import qualified System.IO.Streams as Streams
 import qualified System.IO.Streams.SSL as Streams hiding (connect)
+
+#if !MIN_VERSION_base(4,8,0)
+import Data.Monoid (mappend, mempty)
+#endif
 
 import Network.Http.Internal
 import Network.Http.ResponseParser
diff --git a/lib/Network/Http/Inconvenience.hs b/lib/Network/Http/Inconvenience.hs
--- a/lib/Network/Http/Inconvenience.hs
+++ b/lib/Network/Http/Inconvenience.hs
@@ -52,7 +52,6 @@
 import qualified Data.HashSet as HashSet
 import Data.IORef (IORef, newIORef, readIORef, writeIORef)
 import Data.List (intersperse)
-import Data.Monoid (Monoid (..), mappend)
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import Data.Typeable (Typeable)
@@ -68,6 +67,10 @@
 import qualified System.IO.Streams as Streams
 import qualified System.IO.Streams.Attoparsec as Streams
 import System.IO.Unsafe (unsafePerformIO)
+
+#if !MIN_VERSION_base(4,8,0)
+import Data.Monoid (Monoid (..), mappend)
+#endif
 
 import Network.Http.Connection
 import Network.Http.RequestBuilder
diff --git a/lib/Network/Http/ResponseParser.hs b/lib/Network/Http/ResponseParser.hs
--- a/lib/Network/Http/ResponseParser.hs
+++ b/lib/Network/Http/ResponseParser.hs
@@ -16,6 +16,7 @@
 --
 
 {-# LANGUAGE BangPatterns       #-}
+{-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE OverloadedStrings  #-}
 
@@ -30,7 +31,6 @@
 
 import Prelude hiding (take, takeWhile)
 
-import Control.Applicative
 import Control.Exception (Exception, throwIO)
 import Control.Monad (void)
 import Control.Monad.IO.Class (liftIO)
@@ -45,6 +45,10 @@
 import System.IO.Streams (Generator, InputStream)
 import qualified System.IO.Streams as Streams
 import qualified System.IO.Streams.Attoparsec as Streams
+
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative
+#endif
 
 import Network.Http.Internal
 import Network.Http.Utilities
diff --git a/tests/MockServer.hs b/tests/MockServer.hs
--- a/tests/MockServer.hs
+++ b/tests/MockServer.hs
@@ -23,7 +23,7 @@
 import Control.Applicative
 import Control.Concurrent (forkIO, threadDelay)
 import Control.Exception (SomeException)
-import Control.Monad.CatchIO (catch)
+import Control.Exception.Lifted (catch)
 import "mtl" Control.Monad.Trans (liftIO)
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Char8 as S
