diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,7 @@
 # Changelog for ghc-lib-parser-ex
 
+## 0.20200401 released 2020-04-01
+
 ## 8.10.0.2 released 2020-03-30
 - Rework cabal flags; allow full configurability with a good default:
   - Have two flags `auto` and `no-ghc-lib`. Default behavior exactly as `hlint` linking `ghc-lib-parser-8.10.*` if not on `ghc-8.10.*` and `ghc-8.10.*` otherwise.
diff --git a/ghc-lib-parser-ex.cabal b/ghc-lib-parser-ex.cabal
--- a/ghc-lib-parser-ex.cabal
+++ b/ghc-lib-parser-ex.cabal
@@ -1,6 +1,6 @@
 cabal-version: >= 1.18
 name:           ghc-lib-parser-ex
-version:        8.10.0.2
+version:        8.10.0.3
 description:    Please see the README on GitHub at <https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme>
 homepage:       https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme
 bug-reports:    https://github.com/shayne-fletcher/ghc-lib-parser-ex/issues
diff --git a/src/Language/Haskell/GhclibParserEx/Fixity.hs b/src/Language/Haskell/GhclibParserEx/Fixity.hs
--- a/src/Language/Haskell/GhclibParserEx/Fixity.hs
+++ b/src/Language/Haskell/GhclibParserEx/Fixity.hs
@@ -15,15 +15,31 @@
   , infixr_, infixl_, infix_, fixity
   ) where
 
+#if defined (GHCLIB_API_811)
+import GHC.Types.Basic
+#else
 import BasicTypes
+#endif
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
 import GHC.Hs
 #else
 import HsSyn
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.Name.Reader
+#else
 import RdrName
+#endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.Name
+#else
 import OccName
+#endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
 import Data.Maybe
 import Data.Data hiding (Fixity)
 import Data.Generics.Uniplate.Data
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Decls.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Decls.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Decls.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Decls.hs
@@ -12,7 +12,11 @@
 #else
 import HsSyn
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
 
 isNewType :: NewOrData -> Bool
 isNewType NewType = True
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs
@@ -22,11 +22,27 @@
 #else
 import HsSyn
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.Name.Reader
+#else
 import RdrName
+#endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.Name
+#else
 import OccName
 import Name
+#endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.Basic
+#else
 import BasicTypes
+#endif
 import TysWiredIn
 
 -- 'True' if the provided expression is a variable with name 'tag'.
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Pat.hs
@@ -16,10 +16,19 @@
 #else
 import HsSyn
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
 import TysWiredIn
+#if defined (GHCLIB_API_811)
+import GHC.Types.Name.Reader
+import GHC.Types.Name
+#else
 import RdrName
 import OccName
+#endif
 import FastString
 
 patToStr :: LPat GhcPs -> String
@@ -35,14 +44,26 @@
 patToStr _ = ""
 #endif
 
-strToPat :: String -> Pat GhcPs
+strToPat :: String -> LPat GhcPs
 strToPat z
-  | z == "True"  = ConPatIn (noLoc true_RDR) (PrefixCon [])
-  | z == "False" = ConPatIn (noLoc false_RDR) (PrefixCon [])
-  | z == "[]"    = ConPatIn (noLoc $ nameRdrName nilDataConName) (PrefixCon [])
+  | z == "True"  =
+#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+  noLoc $
+#endif
+    ConPatIn (noLoc true_RDR) (PrefixCon [])
+  | z == "False" =
+#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+  noLoc $
+#endif
+    ConPatIn (noLoc false_RDR) (PrefixCon [])
+  | z == "[]"    =
+#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
+  noLoc $
+#endif
+    ConPatIn (noLoc $ nameRdrName nilDataConName) (PrefixCon [])
   | otherwise =
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-      VarPat noExtField (noLoc $ mkVarUnqual (fsLit z))
+      noLoc $ VarPat noExtField (noLoc $ mkVarUnqual (fsLit z))
 #else
       VarPat noExt (noLoc $ mkVarUnqual (fsLit z))
 #endif
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Types.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Types.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Types.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Types.hs
@@ -13,7 +13,11 @@
 #else
 import HsSyn
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
 
 fromTyParen :: LHsType GhcPs -> LHsType GhcPs
 fromTyParen (L _ (HsParTy _ x)) = x
diff --git a/src/Language/Haskell/GhclibParserEx/Parse.hs b/src/Language/Haskell/GhclibParserEx/Parse.hs
--- a/src/Language/Haskell/GhclibParserEx/Parse.hs
+++ b/src/Language/Haskell/GhclibParserEx/Parse.hs
@@ -39,7 +39,11 @@
 import Lexer
 import qualified Parser
 import FastString
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
 #if defined (GHCLIB_API_811)
 import GHC.Driver.Backpack.Syntax
 #else
@@ -50,7 +54,11 @@
 #else
 import PackageConfig
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.Name.Reader
+#else
 import RdrName
+#endif
 
 parse :: P a -> String -> DynFlags -> ParseResult a
 parse p str flags =
@@ -86,12 +94,16 @@
 parseDeclaration :: String -> DynFlags -> ParseResult (LHsDecl GhcPs)
 parseDeclaration = parse Parser.parseDeclaration
 
+parseExpression :: String -> DynFlags -> ParseResult (LHsExpr GhcPs)
+parseExpression s flags =
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-parseExpression :: String -> DynFlags -> ParseResult RdrHsSyn.ECP
+  case parse Parser.parseExpression s flags of
+    POk s e ->
+       unP (runECP_P e >>= return) s :: ParseResult (LHsExpr GhcPs)
+    PFailed ps -> PFailed ps
 #else
-parseExpression :: String -> DynFlags -> ParseResult (LHsExpr GhcPs)
+  parse Parser.parseExpression s flags
 #endif
-parseExpression = parse Parser.parseExpression
 
 parsePattern :: String -> DynFlags -> ParseResult (LPat GhcPs)
 parsePattern = parse Parser.parsePattern
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -29,11 +29,14 @@
 
 #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
 import GHC.Hs
-import RdrHsSyn
 #else
 import HsSyn
 #endif
+#if defined (GHCLIB_API_811)
+import GHC.Types.SrcLoc
+#else
 import SrcLoc
+#endif
 #if defined (GHCLIB_API_811)
 import GHC.Driver.Session
 #else
@@ -141,30 +144,13 @@
 exprTest :: String -> DynFlags -> (LHsExpr GhcPs -> IO ()) -> IO ()
 exprTest s flags test =
       case parseExpression s flags of
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-        POk s e ->
-#else
-        POk _ e ->
-#endif
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-          case unP (runECP_P e >>= \e -> return e) s :: ParseResult (LHsExpr GhcPs) of
-            POk _  e ->
-#endif
-              test e
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-            _ -> assertFailure "parse error"
-#endif
+        POk _ e -> test e
         _ -> assertFailure "parse error"
 
 patTest :: String -> DynFlags -> (LPat GhcPs -> IO ()) -> IO ()
 patTest s flags test =
       case parsePattern s flags of
-#if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)
-        POk _ e ->
-#else
-        POk _ e ->
-#endif
-              test e
+        POk _ e -> test e
         _ -> assertFailure "parse error"
 
 fixityTests :: TestTree
@@ -281,9 +267,9 @@
   [ testCase "patToStr" $ test "True" $ assert' . (== "True") . patToStr
   , testCase "patToStr" $ test "False" $ assert' . (== "False") . patToStr
   , testCase "patToStr" $ test "[]" $ assert' . (== "[]") . patToStr
-  , testCase "strToPat" $ assert' . (== "True") . patToStr . noLoc . strToPat $ "True"
-  , testCase "strToPat" $ assert' . (== "False") . patToStr . noLoc . strToPat $ "False"
-  , testCase "strToPat" $ assert' . (== "[]") . patToStr . noLoc . strToPat $ "[]"
+  , testCase "strToPat" $ assert' . (== "True") . patToStr . strToPat $ "True"
+  , testCase "strToPat" $ assert' . (== "False") . patToStr . strToPat $ "False"
+  , testCase "strToPat" $ assert' . (== "[]") . patToStr . strToPat $ "[]"
   , testCase "fromPChar" $ test "'a'" $ assert' . (== Just 'a') . fromPChar
   , testCase "fromPChar" $ test "\"a\"" $ assert' . isNothing . fromPChar
   ]
