diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,14 @@
 # Changelog for ghc-lib-parser-ex
 
+## 8.10.0.22 released 2021-08-14
+- Update to `ghc-lib-parser-0.20210814`
+- Added to `GhclibParserEx.GHC.Hs.Expr`:
+  - `isMonadComp`
+  - `isListComp`
+
+## 0.20210701 released 2021-07-01
+- Update to `ghc-lib-0.20210701`
+
 ## 8.10.0.21 released 2021-06-07
 - Bugfix cabal files
 
@@ -15,7 +24,7 @@
 
 ## 0.20210331 released 2021-02-31
 - Update to `ghc-lib-0.20210331`
-- Upgrade to `ghc-lib-parser-9.0.1.20210324`
+- Update to `ghc-lib-parser-9.0.1.20210324`
 
 ## 9.0.0.4 released 2021-03-11
 - Bugfix for `GHC.Hs.Dump`
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
+cabal-version:  1.18
 name:           ghc-lib-parser-ex
-version:        8.10.0.21
+version:        8.10.0.22
 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/GHC/Driver/Session.hs b/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs
@@ -44,6 +44,9 @@
 instance Ord Extension where
   compare = compare `on` fromEnum
 #endif
+#if defined (GHCLIB_API_HEAD)
+import GHC.Driver.Config.Parser
+#endif
 
 -- | Parse a GHC extension.
 readExtension :: String -> Maybe Extension
@@ -158,7 +161,12 @@
                          -> IO (Either String DynFlags)
 parsePragmasIntoDynFlags flags (enable, disable) file str =
   catchErrors $ do
-    let opts = getOptions flags (stringToStringBuffer str) file
+    let opts =
+#if defined (GHCLIB_API_HEAD)
+          getOptions (initParserOpts flags) (stringToStringBuffer str) file
+#else
+          getOptions flags (stringToStringBuffer str) file
+#endif
     -- Important : apply enables, disables *before* parsing dynamic
     -- file pragmas.
     let flags' =  foldl' xopt_set flags enable
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
@@ -9,7 +9,7 @@
   isTag, isDol, isDot, isReturn, isSection, isRecConstr, isRecUpdate,
   isVar, isPar, isApp, isOpApp, isAnyApp, isLexeme, isLambda, isQuasiQuote,
   isDotApp, isTypeApp, isWHNF, isLCase,
-  isFieldPun, isFieldPunUpdate, isRecStmt, isParComp, isMDo, isTupleSection, isString, isPrimLiteral,
+  isFieldPun, isFieldPunUpdate, isRecStmt, isParComp, isMDo, isListComp, isMonadComp, isTupleSection, isString, isPrimLiteral,
   isSpliceDecl, isFieldWildcard, isUnboxed, isWholeFrac, isStrictMatch, isMultiIf, isProc, isTransStmt,
   hasFieldsDotDot,
   varToStr, strToVar,
@@ -117,12 +117,21 @@
 isParComp :: StmtLR GhcPs GhcPs (LHsExpr GhcPs) -> Bool
 isParComp = \case ParStmt{} -> True; _ -> False
 
+-- TODO: Seems `HsStmtContext (HsDoRn p)` on master right now.
 #if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_902) || defined (GHCLIB_API_900)
 isMDo :: HsStmtContext GhcRn -> Bool
 isMDo = \case MDoExpr _ -> True; _ -> False
+isMonadComp :: HsStmtContext GhcRn -> Bool
+isMonadComp = \case MonadComp -> True; _ -> False
+isListComp :: HsStmtContext GhcRn -> Bool
+isListComp = \case ListComp -> True; _ -> False
 #else
 isMDo :: HsStmtContext Name -> Bool
 isMDo = \case MDoExpr -> True; _ -> False
+isMonadComp :: HsStmtContext Name -> Bool
+isMonadComp = \case MonadComp -> True; _ -> False
+isListComp :: HsStmtContext Name -> Bool
+isListComp = \case ListComp -> True; _ -> False
 #endif
 
 isTupleSection :: HsTupArg GhcPs -> Bool
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs b/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Parser.hs
@@ -28,7 +28,12 @@
 import HsSyn
 #endif
 #if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_902)
+#  if defined (GHCLIB_API_902)
 import GHC.Driver.Config
+#  endif
+#  if defined (GHCLIB_API_HEAD)
+import GHC.Driver.Config.Parser
+#  endif
 #endif
 #if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_902) || defined (GHCLIB_API_900)
 import GHC.Parser.PostProcess
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -353,7 +353,13 @@
   , testCase "isQuasiQuote" $ test "[expr(1 + 2)]" $ assert' . not . isQuasiQuote
   , testCase "isWholeFrac" $ test "3.2e1" $ assert' . isWholeFrac . unLoc
   , testCase "isWholeFrac" $ test "3.22e1" $ assert' . not . isWholeFrac . unLoc
-  , testCase "isMDo" $ test "mdo { pure () }" $ assert' . any isMDo . universeBi
+  , testCase "isMDo" $ test_with_exts [ RecursiveDo ] "mdo { pure () }" $ assert' . any isMDo . universeBi
+  , testCase "isListComp (1)" $ test "[ x + y | x <- xs, y <- ys ]" $ assert' . any isListComp . universeBi
+  , testCase "isListComp (2)" $ test_with_exts [ MonadComprehensions ] "[ x + y | x <- xs, y <- ys ]" $ assert' . any isMonadComp . universeBi
+  , testCase "isMonadComp (0)" $ test_with_exts [ MonadComprehensions ] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . not . any isListComp . universeBi
+  , testCase "isMonadComp (1)" $ test_with_exts [ MonadComprehensions ] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . any isMonadComp . universeBi
+  , testCase "isMonadComp (2)" $ test_with_exts [] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . not . any isMonadComp . universeBi
+  , testCase "isMonadComp (3)" $ test_with_exts [] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . any isListComp . universeBi
   , testCase "strToVar" $ assert' . isVar . strToVar $ "foo"
   , testCase "varToStr" $ test "[]" $ assert' . (== "[]") . varToStr
   , testCase "varToStr" $ test "foo" $ assert' . (== "foo") . varToStr
@@ -361,15 +367,17 @@
   ]
   where
     assert' = assertBool ""
-    test s = exprTest s flags
-    flags = foldl' xopt_set (defaultDynFlags fakeSettings fakeLlvmConfig)
-              [ TemplateHaskell
-              , TemplateHaskellQuotes
-              , QuasiQuotes
-              , TypeApplications
-              , LambdaCase
-              , RecursiveDo
-              ]
+    test s = exprTest s (flags [])
+    test_with_exts exts s = exprTest s (flags exts)
+    flags exts = foldl' xopt_set (defaultDynFlags fakeSettings fakeLlvmConfig)
+              (exts ++
+                 [ TemplateHaskell
+                 , TemplateHaskellQuotes
+                 , QuasiQuotes
+                 , TypeApplications
+                 , LambdaCase
+                 ]
+              )
 
 patternPredicateTests :: TestTree
 patternPredicateTests = testGroup "Pattern predicate tests"
