diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,8 @@
 # Changelog for ghc-lib-parser-ex
 
+## 8.10.0.8 released 2020-05-14
+- New module `Language.Haskell.GhclibParserEx.GHC.Types.Name.Reader`
+
 ## 8.10.0.7 released 2020-05-13
 - New function `fixitiesFromModule`
 
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.7
+version:        8.10.0.8
 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
@@ -45,6 +45,7 @@
       Language.Haskell.GhclibParserEx.GHC.Hs.Decls
       Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstances
       Language.Haskell.GhclibParserEx.GHC.Parser
+      Language.Haskell.GhclibParserEx.GHC.Types.Name.Reader
       Language.Haskell.GhclibParserEx.GHC.Utils.Outputable
       -- Deprecated and will be removed in a future release.
       Language.Haskell.GhclibParserEx.Parse
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Types/Name/Reader.hs b/src/Language/Haskell/GhclibParserEx/GHC/Types/Name/Reader.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Types/Name/Reader.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2020, Shayne Fletcher. All rights reserved.
+-- SPDX-License-Identifier: BSD-3-Clause.
+
+{-# LANGUAGE CPP #-}
+#include "ghclib_api.h"
+
+module Language.Haskell.GhclibParserEx.GHC.Types.Name.Reader(
+   occNameStr, rdrNameStr, isSpecial, unqual, fromQual
+ )
+where
+
+#if defined(GHCLIB_API_811)
+import GHC.Types.SrcLoc
+import GHC.Types.Name
+import GHC.Types.Name.Reader
+#else
+import SrcLoc
+import RdrName
+import OccName
+import Name
+#endif
+
+-- These names may not seem natural here but they work out in
+-- practice. The use of thse two functions is thoroughly ubiquitous.
+occNameStr :: RdrName -> String; occNameStr = occNameString . rdrNameOcc
+rdrNameStr :: Located RdrName -> String; rdrNameStr = occNameStr . unLoc
+
+-- Builtin type or data constructors.
+isSpecial :: Located RdrName -> Bool
+isSpecial (L _ (Exact n)) = isDataConName n || isTyConName n
+isSpecial _ = False
+
+-- Coerce qualified names to unqualified (by discarding the
+-- qualifier).
+unqual :: Located RdrName -> Located RdrName
+unqual (L loc (Qual _ n)) = L loc $ mkRdrUnqual n
+unqual x = x
+
+-- Extract the occ name from a qualified/unqualified reader name.
+fromQual :: Located RdrName -> Maybe OccName
+fromQual (L _ (Qual _ x)) = Just x
+fromQual (L _ (Unqual x)) = Just x
+fromQual _ = Nothing
