diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,6 @@
+Changes in 0.24.2
+  - Use `GHC.ResponseFile.expandResponse`
+
 Changes in 0.24.1
   - Interpret GHC response files
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2009-2024 Simon Hengel <sol@typeful.net>
+Copyright (c) 2009-2025 Simon Hengel <sol@typeful.net>
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/doctest.cabal b/doctest.cabal
--- a/doctest.cabal
+++ b/doctest.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.38.0.
+-- This file has been generated from package.yaml by hpack version 0.38.1.
 --
 -- see: https://github.com/sol/hpack
 
 name:           doctest
-version:        0.24.1
+version:        0.24.2
 synopsis:       Test interactive Haskell examples
 description:    `doctest` is a tool that checks [examples](https://www.haskell.org/haddock/doc/html/ch03s08.html#idm140354810775744)
                 and [properties](https://www.haskell.org/haddock/doc/html/ch03s08.html#idm140354810771856)
@@ -18,7 +18,7 @@
 homepage:       https://github.com/sol/doctest#readme
 license:        MIT
 license-file:   LICENSE
-copyright:      (c) 2009-2024 Simon Hengel
+copyright:      (c) 2009-2025 Simon Hengel
 author:         Simon Hengel <sol@typeful.net>
 maintainer:     Simon Hengel <sol@typeful.net>
 build-type:     Simple
@@ -154,14 +154,14 @@
       Util
       Paths_doctest
   build-depends:
-      base >=4.7 && <5
+      base >=4.12 && <5
     , code-page >=0.1
     , containers
     , deepseq
     , directory
     , exceptions
     , filepath
-    , ghc >=8.0 && <9.14
+    , ghc >=8.6 && <9.14
     , ghc-paths >=0.1.0.9
     , process
     , syb >=0.3
@@ -184,7 +184,7 @@
       NoImplicitPrelude
   ghc-options: -Wall -threaded
   build-depends:
-      base >=4.7 && <5
+      base >=4.12 && <5
     , doctest
   default-language: Haskell2010
   if impl(ghc >= 9.0)
@@ -207,7 +207,7 @@
       DeriveFunctor
       NoImplicitPrelude
   build-depends:
-      base >=4.7 && <5
+      base >=4.12 && <5
     , doctest
   default-language: Haskell2010
   if impl(ghc >= 9.0)
@@ -279,14 +279,14 @@
   build-depends:
       HUnit
     , QuickCheck >=2.13.1
-    , base >=4.7 && <5
+    , base >=4.12 && <5
     , code-page >=0.1
     , containers
     , deepseq
     , directory
     , exceptions
     , filepath
-    , ghc >=8.0 && <9.14
+    , ghc >=8.6 && <9.14
     , ghc-paths >=0.1.0.9
     , hspec >=2.3.0
     , hspec-core >=2.3.0
diff --git a/src/Extract.hs b/src/Extract.hs
--- a/src/Extract.hs
+++ b/src/Extract.hs
@@ -29,10 +29,6 @@
 import           System.Directory
 import           System.FilePath
 
-#if __GLASGOW_HASKELL__ < 805
-import           FastString (unpackFS)
-#endif
-
 import           System.Posix.Internals (c_getpid)
 
 import           GhcUtil (withGhc)
@@ -41,13 +37,11 @@
 import           Util (convertDosLineEndings)
 import           PackageDBs (getPackageDBArgs)
 
-#if __GLASGOW_HASKELL__ >= 806
 #if __GLASGOW_HASKELL__ < 900
 import           DynamicLoading (initializePlugins)
 #else
 import           GHC.Runtime.Loader (initializePlugins)
 #endif
-#endif
 
 #if __GLASGOW_HASKELL__ >= 901
 import           GHC.Unit.Module.Graph
@@ -87,15 +81,6 @@
 instance NFData a => NFData (Module a) where
   rnf (Module name setup content) = name `deepseq` setup `deepseq` content `deepseq` ()
 
-#if __GLASGOW_HASKELL__ < 803
-type GhcPs = RdrName
-#endif
-
-#if __GLASGOW_HASKELL__ < 805
-addQuoteInclude :: [String] -> [String] -> [String]
-addQuoteInclude includes new = new ++ includes
-#endif
-
 -- | Parse a list of modules.
 parse :: [String] -> IO [ParsedModule]
 parse args = withGhc args $ \modules_ -> withTempOutputDir $ do
@@ -156,7 +141,6 @@
       , includePaths = addQuoteInclude (includePaths d) [f]
       }
 
-#if __GLASGOW_HASKELL__ >= 806
     -- Since GHC 8.6, plugins are initialized on a per module basis
     loadModPlugins modsum = do
       _ <- setSessionDynFlags (GHC.ms_hspp_opts modsum)
@@ -170,9 +154,6 @@
       dynflags' <- liftIO (initializePlugins hsc_env (GHC.ms_hspp_opts modsum))
       return $ modsum { ms_hspp_opts = dynflags' }
 # endif
-#else
-    loadModPlugins = return
-#endif
 
 -- | Extract all docstrings from given list of files/modules.
 --
@@ -241,11 +222,7 @@
 #else
     exports = [ (Nothing, L (locA loc) doc)
 #endif
-#if __GLASGOW_HASKELL__ < 805
-              | L loc (IEDoc doc) <- maybe [] unLoc (hsmodExports source)
-#else
               | L loc (IEDoc _ doc) <- maybe [] unLoc (hsmodExports source)
-#endif
               ]
     decls :: [(Maybe String, LHsDocString)]
     decls   = extractDocStrings (hsmodDecls source)
@@ -283,11 +260,7 @@
       -- Top-level documentation has to be treated separately, because it has
       -- no location information attached.  The location information is
       -- attached to HsDecl instead.
-#if __GLASGOW_HASKELL__ < 805
-      DocD x
-#else
       DocD _ x
-#endif
                -> select (fromDocDecl (locA loc) x)
 
       _ -> (extractDocStrings decl, True)
@@ -313,12 +286,6 @@
 -- | Collect given value and descend into subtree.
 select :: a -> ([a], Bool)
 select x = ([x], False)
-#endif
-
-#if __GLASGOW_HASKELL__ < 805
--- | Convert a docstring to a plain string.
-unpackHDS :: HsDocString -> String
-unpackHDS (HsDocString s) = unpackFS s
 #endif
 
 #if __GLASGOW_HASKELL__ < 901
diff --git a/src/GhcUtil.hs b/src/GhcUtil.hs
--- a/src/GhcUtil.hs
+++ b/src/GhcUtil.hs
@@ -25,10 +25,6 @@
 
 import           System.Exit (exitFailure)
 
-#if __GLASGOW_HASKELL__ < 801
-import           StaticFlags (discardStaticFlags)
-#endif
-
 -- Catch GHC source errors, print them and exit.
 handleSrcErrors :: Ghc a -> Ghc a
 handleSrcErrors action' = flip handleSourceError action' $ \err -> do
@@ -44,11 +40,7 @@
     handleDynamicFlags flags_ >>= handleSrcErrors . action
 
 handleStaticFlags :: [String] -> IO [Located String]
-#if __GLASGOW_HASKELL__ < 801
-handleStaticFlags flags = return $ map noLoc $ discardStaticFlags flags
-#else
 handleStaticFlags flags = return $ map noLoc $ flags
-#endif
 
 handleDynamicFlags :: GhcMonad m => [Located String] -> m [String]
 handleDynamicFlags flags = do
diff --git a/src/Imports.hs b/src/Imports.hs
--- a/src/Imports.hs
+++ b/src/Imports.hs
@@ -14,13 +14,7 @@
 import           System.Exit
 import           System.Process
 
-#if __GLASGOW_HASKELL__ >= 804
 import           Data.Functor as Imports ((<&>))
-#else
-infixl 1 <&>
-(<&>) :: Functor f => f a -> (a -> b) -> f b
-(<&>) = flip fmap
-#endif
 
 pass :: Monad m => m ()
 pass = return ()
diff --git a/src/Interpreter.hs b/src/Interpreter.hs
--- a/src/Interpreter.hs
+++ b/src/Interpreter.hs
@@ -46,10 +46,8 @@
   let
     args = flags ++ [
         xTemplateHaskell
-#if __GLASGOW_HASKELL__ >= 802
       , "-fdiagnostics-color=never"
       , "-fno-diagnostics-show-caret"
-#endif
 #if __GLASGOW_HASKELL__ >= 810 && __GLASGOW_HASKELL__ < 904
       , "-Wno-unused-packages"
 #endif
diff --git a/src/Run.hs b/src/Run.hs
--- a/src/Run.hs
+++ b/src/Run.hs
@@ -23,6 +23,7 @@
 
 import           Imports
 
+import           GHC.ResponseFile (expandResponse)
 import           System.Directory (doesFileExist, doesDirectoryExist, getDirectoryContents)
 import           System.Environment (getEnvironment)
 import           System.Exit (exitFailure, exitSuccess)
@@ -63,7 +64,7 @@
 doctest = doctestWithRepl (repl defaultConfig)
 
 doctestWithRepl :: (String, [String]) -> [String] -> IO ()
-doctestWithRepl repl = interpretResponseFile >=> \ args0 -> case parseOptions args0 of
+doctestWithRepl repl = expandResponse >=> \ args0 -> case parseOptions args0 of
   Options.ProxyToGhc args -> exec Interpreter.ghc args
   Options.Output s -> putStr s
   Options.Result (Run warnings magicMode config) -> do
@@ -83,11 +84,6 @@
         addDistArgs <- getAddDistArgs
         return (addDistArgs $ packageDBArgs ++ expandedArgs)
     doctestWith config{repl, ghcOptions = opts}
-
-interpretResponseFile :: [String] -> IO [String]
-interpretResponseFile = \ case
-  ['@':name] -> lines <$> readFile name
-  args -> return args
 
 -- | Expand a reference to a directory to all .hs and .lhs files within it.
 expandDirs :: String -> IO [String]
diff --git a/src/Runner.hs b/src/Runner.hs
--- a/src/Runner.hs
+++ b/src/Runner.hs
@@ -61,13 +61,8 @@
 -- | Sum up summaries.
 instance Monoid Summary where
   mempty = Summary 0 0 0 0
-#if __GLASGOW_HASKELL__ < 804
-  mappend
-#else
 instance Semigroup Summary where
-  (<>)
-#endif
-    (Summary x1 x2 x3 x4) (Summary y1 y2 y3 y4) = Summary (x1 + y1) (x2 + y2) (x3 + y3) (x4 + y4)
+  Summary x1 x2 x3 x4 <> Summary y1 y2 y3 y4 = Summary (x1 + y1) (x2 + y2) (x3 + y3) (x4 + y4)
 
 withLineBuffering :: Handle -> IO c -> IO c
 withLineBuffering h action = bracket (hGetBuffering h) (hSetBuffering h) $ \ _ -> do
diff --git a/test/Language/Haskell/GhciWrapperSpec.hs b/test/Language/Haskell/GhciWrapperSpec.hs
--- a/test/Language/Haskell/GhciWrapperSpec.hs
+++ b/test/Language/Haskell/GhciWrapperSpec.hs
@@ -89,13 +89,8 @@
       ghci "exitWith $ ExitFailure 10" `shouldReturn` "*** Exception: ExitFailure 10\n"
 
     it "gives an error message for identifiers that are not in scope" $ withInterpreter $ \ghci -> do
-#if __GLASGOW_HASKELL__ >= 800
       ghci "foo" >>= (`shouldSatisfy` isInfixOf "Variable not in scope: foo")
-#elif __GLASGOW_HASKELL__ >= 707
-      ghci "foo" >>= (`shouldSatisfy` isSuffixOf "Not in scope: \8216foo\8217\n")
-#else
-      ghci "foo" >>= (`shouldSatisfy` isSuffixOf "Not in scope: `foo'\n")
-#endif
+
     context "when configVerbose is True" $ do
       it "prints prompt" $ do
         withInterpreterConfig defaultConfig{configVerbose = True} [] $ \ghci -> do
