diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## GHC syntax highlighter 0.0.4.1
+
+* Works with GHC 8.8.
+
+* Dropped support for GHC 8.2.
+
 ## GHC syntax highlighter 0.0.4.0
 
 * Implemented highlighting of file header pragmas such as `OPTIONS_GHC` and
diff --git a/GHC/SyntaxHighlighter.hs b/GHC/SyntaxHighlighter.hs
--- a/GHC/SyntaxHighlighter.hs
+++ b/GHC/SyntaxHighlighter.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  GHC.SyntaxHighlighter
--- Copyright   :  © 2018–2019 Mark Karpov
+-- Copyright   :  © 2018–present Mark Karpov
 -- License     :  BSD 3 clause
 --
 -- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
@@ -17,7 +17,7 @@
 {-# LANGUAGE LambdaCase                    #-}
 {-# LANGUAGE OverloadedStrings             #-}
 {-# LANGUAGE TupleSections                 #-}
-{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}
+{-# OPTIONS_GHC -fno-warn-missing-fields #-}
 
 module GHC.SyntaxHighlighter
   ( Token (..)
@@ -27,13 +27,12 @@
 where
 
 import Control.Monad
-import Data.Bits
-import Data.List (unfoldr, foldl')
+import Data.List (foldl', unfoldr)
 import Data.Maybe (isJust)
 import Data.Text (Text)
-import Data.Word (Word64)
+import DynFlags
 import FastString (mkFastString)
-import Module (newSimpleUnitId, ComponentId (..))
+import GHC.LanguageExtensions
 import SrcLoc
 import StringBuffer
 import qualified Data.Text as T
@@ -122,11 +121,17 @@
     location = mkRealSrcLoc (mkFastString "") 1 1
     buffer = stringToStringBuffer (T.unpack input)
     parseState = L.mkPStatePure parserFlags buffer location
-    parserFlags = L.ParserFlags
-      { L.pWarningFlags = ES.empty
-      , L.pExtensionFlags = ES.empty
-      , L.pThisPackage = newSimpleUnitId (ComponentId (mkFastString ""))
-      , L.pExtsBitmap = extsBitmap
+    parserFlags = L.mkParserFlags (foldl' xopt_set initialDynFlags enabledExts)
+    initialDynFlags = DynFlags
+      { warningFlags = ES.empty
+      , generalFlags = ES.fromList
+        [ Opt_Haddock
+        , Opt_KeepRawTokenStream
+        ]
+      , extensions = []
+      , extensionFlags = ES.empty
+      , safeHaskell = Sf_Safe
+      , language = Just Haskell2010
       }
 
 -- | Haskell lexer.
@@ -255,6 +260,9 @@
   L.IToverlaps_prag _ -> PragmaTok
   L.ITincoherent_prag _ -> PragmaTok
   L.ITctype _ -> PragmaTok
+#if MIN_VERSION_ghc(8,8,1)
+  L.ITcomment_line_prag -> PragmaTok
+#endif
   -- Reserved symbols
   L.ITdotdot -> SymbolTok
   L.ITcolon -> SymbolTok
@@ -426,109 +434,39 @@
   guard (T.isPrefixOf "LANGUAGE" txt1 || T.isPrefixOf "OPTIONS_GHC" txt1)
 
 ----------------------------------------------------------------------------
--- Exts bitmap hack
-
--- | Extension bitmap we use in this library.
-
-extsBitmap :: Word64
-extsBitmap = mkExtsBitmap enabledExts
-{-# NOINLINE extsBitmap #-}
-
--- | Create extension bitmap similarly to how it's done in GHC.
-
-mkExtsBitmap :: [ExtBits] -> Word64
-mkExtsBitmap = foldl' f 0
-  where
-    f w x = bit (fromEnum x) .|. w
-
--- | Copied from GHC sources that are not yet available in the @ghc@
--- package.
-
-data ExtBits
-  = FfiBit
-  | InterruptibleFfiBit
-  | CApiFfiBit
-#if !MIN_VERSION_ghc(8,6,0)
-  | ParrBit
-#endif
-  | ArrowsBit
-  | ThBit
-  | ThQuotesBit
-  | IpBit
-  | OverloadedLabelsBit -- #x overloaded labels
-  | ExplicitForallBit -- the 'forall' keyword and '.' symbol
-  | BangPatBit -- Tells the parser to understand bang-patterns
-               -- (doesn't affect the lexer)
-  | PatternSynonymsBit -- pattern synonyms
-  | HaddockBit-- Lex and parse Haddock comments
-  | MagicHashBit -- "#" in both functions and operators
-  | RecursiveDoBit -- mdo
-  | UnicodeSyntaxBit -- the forall symbol, arrow symbols, etc
-  | UnboxedTuplesBit -- (# and #)
-  | UnboxedSumsBit -- (# and #)
-  | DatatypeContextsBit
-  | TransformComprehensionsBit
-  | QqBit -- enable quasiquoting
-  | InRulePragBit
-  | RawTokenStreamBit -- producing a token stream with all comments included
-  | SccProfilingOnBit
-  | HpcBit
-  | AlternativeLayoutRuleBit
-  | RelaxedLayoutBit
-  | NondecreasingIndentationBit
-  | SafeHaskellBit
-  | TraditionalRecordSyntaxBit
-  | ExplicitNamespacesBit
-  | LambdaCaseBit
-  | BinaryLiteralsBit
-  | NegativeLiteralsBit
-  | HexFloatLiteralsBit
-  | TypeApplicationsBit
-  | StaticPointersBit
-  | NumericUnderscoresBit
-#if MIN_VERSION_ghc(8,6,0)
-  | StarIsTypeBit
-#endif
-  deriving Enum
+-- Language extensions
 
--- | Extension we enable for the best user experience.
+-- | Language extensions we enable by default.
 
-enabledExts :: [ExtBits]
+enabledExts :: [Extension]
 enabledExts =
-  [ FfiBit
-  , InterruptibleFfiBit
-  , CApiFfiBit
-#if !MIN_VERSION_ghc(8,6,0)
-  , ParrBit
-#endif
-  , ArrowsBit
-  , ThBit
-  , ThQuotesBit
-  , IpBit
-  , OverloadedLabelsBit
-  , ExplicitForallBit
-  , BangPatBit
-  , PatternSynonymsBit
-  , HaddockBit
-  , MagicHashBit
-  , RecursiveDoBit
-  , UnicodeSyntaxBit
-  , UnboxedTuplesBit
-  , UnboxedSumsBit
-  , DatatypeContextsBit
-  , TransformComprehensionsBit
-  , QqBit
-  , InRulePragBit
-  , RawTokenStreamBit
-  , SafeHaskellBit
-  , LambdaCaseBit
-  , BinaryLiteralsBit
-  , NegativeLiteralsBit
-  , HexFloatLiteralsBit
-  , TypeApplicationsBit
-  , StaticPointersBit
-  , NumericUnderscoresBit
+  [ ForeignFunctionInterface
+  , InterruptibleFFI
+  , CApiFFI
+  , Arrows
+  , TemplateHaskell
+  , TemplateHaskellQuotes
+  , ImplicitParams
+  , OverloadedLabels
+  , ExplicitForAll
+  , BangPatterns
+  , PatternSynonyms
+  , MagicHash
+  , RecursiveDo
+  , UnicodeSyntax
+  , UnboxedTuples
+  , UnboxedSums
+  , DatatypeContexts
+  , TransformListComp
+  , QuasiQuotes
+  , LambdaCase
+  , BinaryLiterals
+  , NegativeLiterals
+  , HexFloatLiterals
+  , TypeApplications
+  , StaticPointers
 #if MIN_VERSION_ghc(8,6,0)
-  , StarIsTypeBit
+  , NumericUnderscores
+  , StarIsType
 #endif
   ]
diff --git a/LICENSE.md b/LICENSE.md
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,4 +1,4 @@
-Copyright © 2018 Mark Karpov
+Copyright © 2018–present Mark Karpov
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -138,7 +138,7 @@
 
 ## License
 
-Copyright © 2018–2019 Mark Karpov
+Copyright © 2018–present Mark Karpov
 
 Distributed under BSD 3 clause license.
 
diff --git a/ghc-syntax-highlighter.cabal b/ghc-syntax-highlighter.cabal
--- a/ghc-syntax-highlighter.cabal
+++ b/ghc-syntax-highlighter.cabal
@@ -1,7 +1,7 @@
 name:                 ghc-syntax-highlighter
-version:              0.0.4.0
+version:              0.0.4.1
 cabal-version:        1.18
-tested-with:          GHC==8.4.4, GHC==8.6.5
+tested-with:          GHC==8.4.4, GHC==8.6.5, GHC==8.8.1
 license:              BSD3
 license-file:         LICENSE.md
 author:               Mark Karpov <markkarpov92@gmail.com>
@@ -27,7 +27,8 @@
 
 library
   build-depends:      base             >= 4.11 && < 5.0
-                    , ghc              >= 8.4  && < 8.7
+                    , ghc              >= 8.4  && < 8.9
+                    , ghc-boot         >= 8.4  && < 8.9
                     , text             >= 0.2  && < 1.3
   exposed-modules:    GHC.SyntaxHighlighter
   if flag(dev)
@@ -35,7 +36,6 @@
                       -Wincomplete-record-updates
                       -Wincomplete-uni-patterns
                       -Wnoncanonical-monad-instances
-                      -Wnoncanonical-monadfail-instances
   else
     ghc-options:      -O2 -Wall
   default-language:   Haskell2010
