diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,10 @@
+## [v0.8.0.3](https://github.com/diagrams/diagrams-builder/tree/v0.8.0.3) (2018-06-09)
+
+- Bump upper bounds: allow `exceptions-0.10`, `lens-4.16`, `hint-0.8`,
+  `base-4.11`, `base-orphans-0.7`
+- Test with GHC 8.4
+- Drop GHC 7.8 support
+
 ## [v0.8.0.2](https://github.com/diagrams/diagrams-builder/tree/v0.8.0.2) (2018-01-21)
 
 - Allow `haskell-src-exts-1.20` and `haskell-src-exts-simple-1.20`
diff --git a/diagrams-builder.cabal b/diagrams-builder.cabal
--- a/diagrams-builder.cabal
+++ b/diagrams-builder.cabal
@@ -1,5 +1,5 @@
 name:                diagrams-builder
-version:             0.8.0.2
+version:             0.8.0.3
 synopsis:            hint-based build service for the diagrams graphics EDSL.
 
 description:         @diagrams-builder@ provides backend-agnostic tools for
@@ -37,7 +37,7 @@
 category:            Graphics
 build-type:          Simple
 cabal-version:       >=1.10
-tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1
+tested-with:         GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.2
 bug-reports:         https://github.com/diagrams/diagrams-builder/issues
 Source-repository head
   type:     git
@@ -48,11 +48,11 @@
                        Diagrams.Builder.Opts
                        Diagrams.Builder.Modules
                        Diagrams.Builder.CmdLine
-  build-depends:       base >=4.2 && < 4.11,
-                       base-orphans >= 0.3 && < 0.7,
+  build-depends:       base >=4.2 && < 4.12,
+                       base-orphans >= 0.3 && < 0.8,
                        mtl >= 2.1 && < 2.3,
                        diagrams-lib >= 1.4 && < 1.5,
-                       hint >= 0.4 && < 0.8,
+                       hint >= 0.4 && < 0.9,
                        directory,
                        filepath,
                        transformers >= 0.3 && < 0.6,
@@ -60,9 +60,9 @@
                        haskell-src-exts >= 1.18 && < 1.21,
                        haskell-src-exts-simple >= 1.18 && < 1.21,
                        cmdargs >= 0.6 && < 0.11,
-                       lens >= 4.0 && < 4.16,
+                       lens >= 4.0 && < 4.17,
                        hashable >= 1.1 && < 1.3,
-                       exceptions >= 0.3 && < 0.9
+                       exceptions >= 0.3 && < 0.11
   hs-source-dirs:      src
   default-language:    Haskell2010
   other-extensions:    StandaloneDeriving,
@@ -118,7 +118,7 @@
                        diagrams-lib >= 1.4 && < 1.5,
                        diagrams-cairo >= 1.4 && < 1.5,
                        cmdargs >= 0.6 && < 0.11,
-                       lens >= 4.0 && < 4.16
+                       lens >= 4.0 && < 4.17
 
 executable diagrams-builder-svg
   main-is:             diagrams-builder-svg.hs
@@ -159,7 +159,7 @@
                        diagrams-lib >= 1.4 && < 1.5,
                        diagrams-postscript >= 1.4 && < 1.5,
                        cmdargs >= 0.6 && < 0.11,
-                       lens >= 3.8 && < 4.16
+                       lens >= 3.8 && < 4.17
 
 executable diagrams-builder-rasterific
   main-is:             diagrams-builder-rasterific.hs
@@ -179,7 +179,7 @@
                        diagrams-lib >= 1.4 && < 1.5,
                        diagrams-rasterific >= 1.4 && < 1.5,
                        cmdargs >= 0.6 && < 0.11,
-                       lens >= 3.8 && < 4.16,
+                       lens >= 3.8 && < 4.17,
                        JuicyPixels >= 3.1.5 && < 3.3
 
 executable diagrams-builder-pgf
@@ -201,5 +201,5 @@
                        diagrams-pgf >= 1.4 && < 1.5,
                        bytestring >= 0.10.2 && < 0.11,
                        cmdargs >= 0.6 && < 0.11,
-                       lens >= 3.8 && < 4.16,
+                       lens >= 3.8 && < 4.17,
                        texrunner
diff --git a/src/Diagrams/Builder.hs b/src/Diagrams/Builder.hs
--- a/src/Diagrams/Builder.hs
+++ b/src/Diagrams/Builder.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE ScopedTypeVariables   #-}
 {-# LANGUAGE StandaloneDeriving    #-}
 {-# LANGUAGE TupleSections         #-}
+{-# LANGUAGE TypeFamilies          #-}
 {-# OPTIONS_GHC -fno-warn-orphans  #-}
 
 -----------------------------------------------------------------------------
@@ -216,6 +217,7 @@
           compilation <- interpretDiagram (bopts' & backendOpts %~ upd) tmp
           removeFile tmp
           return $ either InterpErr (OK diaHash) compilation
+    Right m -> error $ "Diagrams.Builder.buildDiagram: weird module " ++ show m
 
 -- | Take a list of imports, and return a hash of the contents of
 --   those imports which are local.  Note, this only finds imports
diff --git a/src/Diagrams/Builder/Modules.hs b/src/Diagrams/Builder/Modules.hs
--- a/src/Diagrams/Builder/Modules.hs
+++ b/src/Diagrams/Builder/Modules.hs
@@ -25,7 +25,6 @@
 import           Control.Arrow                (second)
 import           Control.Lens                 ((^.))
 import           Data.Function                (on)
-import           Data.Functor                 ((<$>))
 import           Data.List                    (foldl', groupBy, isPrefixOf, nub,
                                                sortBy)
 import           Data.Maybe                   (isJust)
@@ -91,12 +90,13 @@
   = Module (Just (ModuleHead (ModuleName m) Nothing Nothing)) p i d
 replaceModuleName m (Module (Just (ModuleHead _ w e)) p i d)
   = Module (Just (ModuleHead (ModuleName m) w e)) p i d
+replaceModuleName _ m = m
 
 -- | Delete module exports.
 deleteExports :: Module -> Module
-deleteExports m@(Module Nothing _ _ _) = m
 deleteExports (Module (Just (ModuleHead n w _)) p i d)
   = Module (Just (ModuleHead n w Nothing)) p i d
+deleteExports m = m
 
 -- | Add some @LANGUAGE@ pragmas to a module if necessary.
 addPragmas :: [String] -> Module -> Module
@@ -104,6 +104,7 @@
   where f [] = [LanguagePragma (map Ident langs)]
         f (LanguagePragma ps : rest) = LanguagePragma (ps ++ map Ident langs) : rest
         f (x : rest) = x : f rest
+addPragmas _ m = m
 
 -- | Add some imports to a module if necessary.
 addImports :: [(String, Maybe String)] -> Module -> Module
@@ -116,6 +117,7 @@
              ((==imp) . getModuleName . importModule) imp'
           && (isJust mq == importQualified imp')
           && ((ModuleName <$> mq) == importAs imp')
+addImports _ m = m
 
 -- | Combine two modules into one, with a left bias in the case of
 --   things that can't be sensibly combined (/e.g./ the module name).
@@ -143,8 +145,12 @@
     otherPragmas = filter (not . isLangPragma)
     isLangPragma (LanguagePragma {}) = True
     isLangPragma _                   = False
+combineModules m1 m2 = error $ "Diagrams.Builder.Modules: weird modules " ++ show m1 ++ " and " ++ show m2
 
 -- | Convert a @ModuleName@ to a @String@.
 getModuleName :: ModuleName -> String
 getModuleName (ModuleName n) = n
-
+getModuleName m = error $ "Diagrams.Builder.Modules.getModuleName: got a ModuleName that isn't! " ++ show m
+  -- GHC warns about incomplete matches because ModuleName is now a
+  -- pattern synonym, and the haskell-src-exts-simple package doesn't
+  -- use COMPLETE pragmas
