diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -4,12 +4,16 @@
 
 The format is based on [Keep a Changelog](http://keepachangelog.com/).
 
+## [0.9.0.3] - 2018-03-12
+### Fixed
+  * Build fix for Cabal-2.2 (ghc-8.4)
+
 ## [0.9.0.2] - 2018-03-07
-###
-  * [#53]: Build fix for Nix
+### Fixed
+  * Build fix for Nix ([#53])
 
 ## [0.9.0.1] - 2018-02-16
-###
+### Fixed
   * Build fix for macOS High Sierra (10.13)
 
 ## [0.9.0.0] - 2017-11-15
@@ -25,7 +29,7 @@
 
 ## [0.8.0.1] - 2017-10-24
 ### Fixed
-  * [#50] Escape backslashes used in -D flags on Windows
+  * Escape backslashes used in -D flags on Windows ([#50])
 
 ## [0.8.0.0] - 2017-08-24
 ### Changed
@@ -43,15 +47,15 @@
 
 ## [0.7.5.2] - 2017-01-06
 ### Fixed
-  * [#43]: Build fails with library profiling
-  * [#45]: On Windows, the Cabal installer is looking in the wrong place
-  * [#47]: Windows install fix
+  * Build fails with library profiling ([#43])
+  * On Windows, the Cabal installer is looking in the wrong place ([#45])
+  * Windows install fix ([#47])
 
 ## [0.7.5.1] - 2016-10-21
 ### Fixed
   * Re-enable support for Cabal-1.22
-  * [#40]: Unknown CUDA device compute capability 6.1
-  * [#44]: Compilation fails for CUDA-8 [was: ghc 7.10.3 fail to install]
+  * Unknown CUDA device compute capability 6.1 ([#40])
+  * Compilation fails for CUDA-8 [was: ghc 7.10.3 fail to install] ([#44])
 
 ## [0.7.5.0] - 2016-10-07
 ### Changed
@@ -111,6 +115,7 @@
   * Add functions from CUDA-6.5
 
 
+[0.9.0.3]:    https://github.com/tmcdonell/cuda/compare/0.9.0.2...0.9.0.3
 [0.9.0.2]:    https://github.com/tmcdonell/cuda/compare/0.9.0.1...0.9.0.2
 [0.9.0.1]:    https://github.com/tmcdonell/cuda/compare/0.9.0.0...0.9.0.1
 [0.9.0.0]:    https://github.com/tmcdonell/cuda/compare/0.8.0.1...0.9.0.0
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -8,7 +8,6 @@
 #endif
 
 import Distribution.PackageDescription
-import Distribution.PackageDescription.Parse
 import Distribution.Simple
 import Distribution.Simple.BuildPaths
 import Distribution.Simple.Command
@@ -26,6 +25,11 @@
 import Distribution.PackageDescription.PrettyPrint
 import Distribution.Version
 #endif
+#if MIN_VERSION_Cabal(2,2,0)
+import Distribution.PackageDescription.Parsec
+#else
+import Distribution.PackageDescription.Parse
+#endif
 
 import Control.Exception
 import Control.Monad
@@ -119,20 +123,21 @@
 escBackslash :: FilePath -> FilePath
 escBackslash []        = []
 escBackslash ('\\':fs) = '\\' : '\\' : escBackslash fs
-escBackslash (f:fs)    = f : escBackslash fs
+escBackslash (f:fs)    = f           : escBackslash fs
 
 -- Generates build info with flags needed for CUDA Toolkit to be properly
 -- visible to underlying build tools.
 --
 libraryBuildInfo
-    :: Bool
+    :: Verbosity
+    -> Bool
     -> FilePath
     -> Platform
     -> Version
     -> [FilePath]
     -> [FilePath]
     -> IO HookedBuildInfo
-libraryBuildInfo profile installPath platform@(Platform arch os) ghcVersion extraLibs extraIncludes = do
+libraryBuildInfo verbosity profile installPath platform@(Platform arch os) ghcVersion extraLibs extraIncludes = do
   let
       libraryPaths      = cudaLibraryPath platform installPath : extraLibs
       includePaths      = cudaIncludePath platform installPath : extraIncludes
@@ -141,13 +146,12 @@
           existing <- filterM doesDirectoryExist libraryPaths
           case existing of
                (p0:_) -> return p0
-               _      -> die $ "Could not find path: " ++ show paths
+               _      -> die' verbosity $ "Could not find path: " ++ show paths
 
   -- This can only be defined once, so take the first path which exists
   canonicalLibraryPath <- takeFirstExisting libraryPaths
 
   let
-
       -- OS-specific escaping for -D path defines
       escDefPath | os == Windows = escBackslash
                  | otherwise     = id
@@ -377,7 +381,7 @@
           Nothing        -> warn verbosity $ "Unknown ld.exe version. If generated executables crash when making calls to CUDA, please see " ++ windowsHelpPage
           Just ldVersion -> do
             debug verbosity $ "Found ld.exe version: " ++ show ldVersion
-            when (ldVersion < [2,25,1]) $ die $ windowsLinkerBugMsg ldPath
+            when (ldVersion < [2,25,1]) $ die' verbosity $ windowsLinkerBugMsg ldPath
 
 
 windowsHelpPage :: String
@@ -420,7 +424,7 @@
     -> IO ()
 generateAndStoreBuildInfo verbosity profile platform (CompilerId _ghcFlavor ghcVersion) extraLibs extraIncludes path = do
   installPath <- findCUDAInstallPath verbosity platform
-  hbi         <- libraryBuildInfo profile installPath platform ghcVersion extraLibs extraIncludes
+  hbi         <- libraryBuildInfo verbosity profile installPath platform ghcVersion extraLibs extraIncludes
   storeHookedBuildInfo verbosity path hbi
 
 storeHookedBuildInfo
@@ -452,7 +456,7 @@
     Just installPath -> do
       notice verbosity $ printf "Found CUDA toolkit at: %s" installPath
       return installPath
-    Nothing -> die cudaNotFoundMsg
+    Nothing -> die' verbosity cudaNotFoundMsg
 
 
 cudaNotFoundMsg :: String
@@ -610,7 +614,7 @@
           notice verbosity $ printf "Provide a '%s' file to override this behaviour.\n" customBuildInfoFilePath
           readHookedBuildInfo verbosity generatedBuildInfoFilePath
         else
-          die $ printf "Unexpected failure. Neither the default %s nor custom %s exist.\n" generatedBuildInfoFilePath customBuildInfoFilePath
+          die' verbosity $ printf "Unexpected failure. Neither the default %s nor custom %s exist.\n" generatedBuildInfoFilePath customBuildInfoFilePath
 
 
 -- Replicate the default C2HS preprocessor hook here, and inject a value for
@@ -629,7 +633,7 @@
         platformIndependent = False,
         runPreProcessor     = \(inBaseDir, inRelativeFile)
                                (outBaseDir, outRelativeFile) verbosity ->
-          rawSystemProgramConf verbosity c2hsProgram (withPrograms lbi) . filter (not . null) $
+          runDbProgram verbosity c2hsProgram (withPrograms lbi) . filter (not . null) $
             maybe [] words (lookup "x-extra-c2hs-options" (customFieldsBI bi))
             ++ ["--include=" ++ outBaseDir]
             ++ ["--cppopts=" ++ opt | opt <- getCppOptions bi lbi]
@@ -668,5 +672,10 @@
 #if MIN_VERSION_Cabal(1,25,0)
 versionBranch :: Version -> [Int]
 versionBranch = versionNumbers
+#endif
+
+#if !MIN_VERSION_Cabal(2,0,0)
+die' :: Verbosity -> String -> IO a
+die' _ = die
 #endif
 
diff --git a/cuda.cabal b/cuda.cabal
--- a/cuda.cabal
+++ b/cuda.cabal
@@ -1,5 +1,5 @@
 Name:                   cuda
-Version:                0.9.0.2
+Version:                0.9.0.3
 Synopsis:               FFI binding to the CUDA interface for programming NVIDIA GPUs
 Description:
     The CUDA library provides a direct, general purpose C-like SPMD programming
@@ -181,6 +181,6 @@
 source-repository this
     type:               git
     location:           https://github.com/tmcdonell/cuda
-    tag:                0.9.0.2
+    tag:                0.9.0.3
 
 -- vim: nospell
