diff --git a/generic-src/Language/Haskell/GHC/Parser.hs b/generic-src/Language/Haskell/GHC/Parser.hs
--- a/generic-src/Language/Haskell/GHC/Parser.hs
+++ b/generic-src/Language/Haskell/GHC/Parser.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveFunctor #-}
 module Language.Haskell.GHC.Parser (
   -- Parser handling
@@ -29,7 +30,11 @@
 import Bag
 import ErrUtils hiding (ErrMsg)
 import FastString
+#if MIN_VERSION_ghc(8,4,0)
+import GHC hiding (Located, Parsed)
+#else
 import GHC hiding (Located)
+#endif
 import Lexer
 import OrdList
 import Outputable hiding ((<>))
@@ -89,13 +94,21 @@
     toParseOut $ unP parser parseState
   where
     toParseOut :: ParseResult a -> ParseOutput a
+#if MIN_VERSION_ghc(8,4,0)
+    toParseOut (PFailed _ span@(RealSrcSpan realSpan) err) =
+#else
     toParseOut (PFailed span@(RealSrcSpan realSpan) err) =
+#endif
       let errMsg = printErrorBag $ unitBag $ mkPlainErrMsg flags span err
           line = srcLocLine $ realSrcSpanStart realSpan
           col = srcLocCol $ realSrcSpanStart realSpan
         in Failure errMsg $ Loc line col
 
+#if MIN_VERSION_ghc(8,4,0)
+    toParseOut (PFailed _ span err) =
+#else
     toParseOut (PFailed span err) =
+#endif
       let errMsg = printErrorBag $ unitBag $ mkPlainErrMsg flags span err
         in Failure errMsg $ Loc 0 0
 
diff --git a/ghc-parser.cabal b/ghc-parser.cabal
--- a/ghc-parser.cabal
+++ b/ghc-parser.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                ghc-parser
-version:             0.2.0.1
+version:             0.2.0.2
 synopsis:            Haskell source parser from GHC.
 -- description:
 homepage:            https://github.com/gibiansky/IHaskell
@@ -33,7 +33,7 @@
   -- other-modules:
   -- other-extensions:
   build-depends:       base                 >=4.6 && < 5,
-                       ghc                  >=7.6 && <8.3
+                       ghc                  >=7.6 && <8.5
 
   if   impl(ghc >= 7.6) && impl(ghc < 7.8)
     hs-source-dirs:      generic-src src-7.6
@@ -47,6 +47,10 @@
         if impl(ghc < 8.0)
           hs-source-dirs:    generic-src src-7.10
         else
-          hs-source-dirs:    generic-src src-8.0
+          if impl(ghc >= 8.0) && impl(ghc < 8.4)
+            hs-source-dirs:    generic-src src-8.0
+          else
+            hs-source-dirs:    generic-src src-8.4
+
 
   default-language:    Haskell2010
diff --git a/src-8.4/Language/Haskell/GHC/HappyParser.hs b/src-8.4/Language/Haskell/GHC/HappyParser.hs
new file mode 100644
--- /dev/null
+++ b/src-8.4/Language/Haskell/GHC/HappyParser.hs
@@ -0,0 +1,42 @@
+module Language.Haskell.GHC.HappyParser
+    ( fullStatement
+    , fullImport
+    , fullDeclaration
+    , fullExpression
+    , fullTypeSignature
+    , fullModule
+    ) where
+
+import Parser
+import SrcLoc
+
+-- compiler/hsSyn
+import HsSyn
+
+-- compiler/utils
+import OrdList
+
+-- compiler/parser
+import RdrHsSyn
+import Lexer
+
+-- compiler/basicTypes
+import RdrName
+
+fullStatement :: P (Maybe (LStmt GhcPs (LHsExpr GhcPs)))
+fullStatement = parseStmt
+
+fullImport :: P (LImportDecl GhcPs)
+fullImport = parseImport
+
+fullDeclaration :: P (OrdList (LHsDecl GhcPs))
+fullDeclaration = fmap unitOL parseDeclaration
+
+fullExpression :: P (LHsExpr GhcPs)
+fullExpression = parseExpression
+
+fullTypeSignature :: P (Located (OrdList (LHsDecl GhcPs)))
+fullTypeSignature = fmap (noLoc . unitOL) parseTypeSignature
+
+fullModule :: P (Located (HsModule GhcPs))
+fullModule = parseModule
