diff --git a/GHC/ForeignSrcLang/Type.hs b/GHC/ForeignSrcLang/Type.hs
new file mode 100644
--- /dev/null
+++ b/GHC/ForeignSrcLang/Type.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE DeriveGeneric #-}
+module GHC.ForeignSrcLang.Type
+  ( ForeignSrcLang(..)
+  ) where
+
+import GHC.Generics (Generic)
+
+data ForeignSrcLang
+  = LangC | LangCxx | LangObjc | LangObjcxx
+  deriving (Eq, Show, Generic)
diff --git a/GHC/LanguageExtensions/Type.hs b/GHC/LanguageExtensions/Type.hs
--- a/GHC/LanguageExtensions/Type.hs
+++ b/GHC/LanguageExtensions/Type.hs
@@ -47,6 +47,7 @@
    | ScopedTypeVariables
    | AllowAmbiguousTypes
    | UnboxedTuples
+   | UnboxedSums
    | BangPatterns
    | TypeFamilies
    | TypeFamilyDependencies
@@ -79,6 +80,7 @@
    | DefaultSignatures        -- Allow extra signatures for defmeths
    | DeriveAnyClass           -- Allow deriving any class
    | DeriveLift               -- Allow deriving Lift
+   | DerivingStrategies
 
    | TypeSynonymInstances
    | FlexibleContexts
diff --git a/GHC/Lexeme.hs b/GHC/Lexeme.hs
--- a/GHC/Lexeme.hs
+++ b/GHC/Lexeme.hs
@@ -11,14 +11,31 @@
 module GHC.Lexeme (
           -- * Lexical characteristics of Haskell names
         startsVarSym, startsVarId, startsConSym, startsConId,
-        startsVarSymASCII, isVarSymChar
+        startsVarSymASCII, isVarSymChar, okSymChar
   ) where
 
 import Data.Char
 
+-- | Is this character acceptable in a symbol (after the first char)?
+-- See alexGetByte in Lexer.x
+okSymChar :: Char -> Bool
+okSymChar c
+  | c `elem` "(),;[]`{}_\"'"
+  = False
+  | otherwise
+  = case generalCategory c of
+      ConnectorPunctuation -> True
+      DashPunctuation      -> True
+      OtherPunctuation     -> True
+      MathSymbol           -> True
+      CurrencySymbol       -> True
+      ModifierSymbol       -> True
+      OtherSymbol          -> True
+      _                    -> False
+
 startsVarSym, startsVarId, startsConSym, startsConId :: Char -> Bool
-startsVarSym c = startsVarSymASCII c || (ord c > 0x7f && isSymbol c)  -- Infix Ids
-startsConSym c = c == ':'               -- Infix data constructors
+startsVarSym c = okSymChar c && c /= ':' -- Infix Ids
+startsConSym c = c == ':'                -- Infix data constructors
 startsVarId c  = c == '_' || case generalCategory c of  -- Ordinary Ids
   LowercaseLetter -> True
   OtherLetter     -> True   -- See #1103
diff --git a/ghc-boot-th.cabal b/ghc-boot-th.cabal
--- a/ghc-boot-th.cabal
+++ b/ghc-boot-th.cabal
@@ -1,9 +1,5 @@
--- WARNING: ghc-boot-th.cabal is automatically generated from
--- ghc-boot-th.cabal.in by ../../configure.  Make sure you are editing
--- ghc-boot-th.cabal.in, not ghc-boot-th.cabal.
-
 name:           ghc-boot-th
-version:        8.0.2
+version:        8.2.1
 license:        BSD3
 license-file:   LICENSE
 category:       GHC
@@ -30,11 +26,9 @@
     default-language: Haskell2010
     other-extensions: DeriveGeneric
 
-    -- Since this is re-exported by ghc-boot
-    exposed: False
-
     exposed-modules:
             GHC.LanguageExtensions.Type
+            GHC.ForeignSrcLang.Type
             GHC.Lexeme
 
-    build-depends: base       >= 4.7 && < 4.10
+    build-depends: base       >= 4.7 && < 4.11
