diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for ghc-lib-parser-ex
 
+## unreleased
+- Deprecate `Dump`
+- New module `GHC.Hs.Dump`
+- Add support for ghc-9.10 series: `GHCLIB_API_910`
+
 ## 9.8.0.2 released
 - Fix broken cpp in `isStrictMatch`
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-# ghc-lib-parser-ex [![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause) [![Hackage version](https://img.shields.io/hackage/v/ghc-lib-parser-ex.svg?label=Hackage)](https://hackage.haskell.org/package/ghc-lib-parser-ex) [![Stackage version](https://www.stackage.org/package/ghc-lib-parser-ex/badge/nightly?label=Stackage)](https://www.stackage.org/package/ghc-lib-parser-ex)  [![Build Status](https://shayne-fletcher.visualstudio.com/ghc-lib-parser-ex/_apis/build/status/shayne-fletcher.ghc-lib-parser-ex?branchName=master)](https://shayne-fletcher.visualstudio.com/ghc-lib-parser-ex/_build/latest?definitionId=1&branchName=master)
-Copyright © 2020-2022 Shayne Fletcher. All rights reserved.
+# ghc-lib-parser-ex [![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause) [![Hackage version](https://img.shields.io/hackage/v/ghc-lib-parser-ex.svg?label=Hackage)](https://hackage.haskell.org/package/ghc-lib-parser-ex) [![Stackage version](https://www.stackage.org/package/ghc-lib-parser-ex/badge/nightly?label=Stackage)](https://www.stackage.org/package/ghc-lib-parser-ex)  [![Build Status](https://shayne-fletcher.visualstudio.com/ghc-lib-parser-ex/_apis/build/status/shayne-fletcher.ghc-lib-parser-ex?branchName=master)](https://shayne-fletcher.visualstudio.com/ghc-lib-parser-ex/_build/latest?definitionId=1&branchName=master)[![stack runhaskell](https://github.com/shayne-fletcher/ghc-lib-parser-ex/actions/workflows/main.yml/badge.svg)](https://github.com/shayne-fletcher/ghc-lib-parser-ex/actions/workflows/main.yml)
+Copyright © 2020-2024 Shayne Fletcher. All rights reserved.
 SPDX-License-Identifier: BSD-3-Clause
 
 The `ghc-lib-parser-ex` package contains GHC API parse tree utilities. It works with or without [`ghc-lib-parser`](https://github.com/digital-asset/ghc-lib).
diff --git a/cbits/ghclib_api.h b/cbits/ghclib_api.h
--- a/cbits/ghclib_api.h
+++ b/cbits/ghclib_api.h
@@ -1,12 +1,13 @@
 /*
-Copyright (c) 2020 - 2023 Shayne Fletcher. All rights reserved.
+Copyright (c) 2020 - 2024 Shayne Fletcher. All rights reserved.
 SPDX-License-Identifier: BSD-3-Clause.
 */
 
 #if !defined(GHCLIB_API_H)
 #  define GHCLIB_API_H
 
-#  if !(defined (GHC_9_10) \
+#  if !(defined (GHC_9_12) \
+     || defined (GHC_9_10)  \
      || defined (GHC_9_8)  \
      || defined (GHC_9_6)  \
      || defined (GHC_9_4)  \
@@ -16,6 +17,8 @@
      || defined (GHC_8_8))
 #    if defined (MIN_VERSION_ghc_lib_parser)
 #       if !MIN_VERSION_ghc_lib_parser ( 1,  0,  0)
+#         define GHC_9_12
+#       elif MIN_VERSION_ghc_lib_parser (9,  10,  0)
 #         define GHC_9_10
 #       elif MIN_VERSION_ghc_lib_parser (9,  8,  0)
 #         define GHC_9_8
@@ -35,7 +38,9 @@
 #         error Unsupported GHC API version
 #      endif
 #    else
-#      if __GLASGOW_HASKELL__   == 909
+#      if __GLASGOW_HASKELL__   == 911
+#        define GHC_9_12
+#      elif __GLASGOW_HASKELL__ == 910
 #        define GHC_9_10
 #      elif __GLASGOW_HASKELL__ == 908
 #        define GHC_9_8
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,21 +1,19 @@
-cabal-version:  1.18
-name:           ghc-lib-parser-ex
-version:        9.8.0.2
-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
-author:         Shayne Fletcher
-maintainer:     shayne@shaynefletcher.org
-copyright:      Copyright © 2020-2022 Shayne Fletcher. All rights reserved.
-license:        BSD3
+cabal-version: 3.4
+name: ghc-lib-parser-ex
+version: 9.10.0.0
+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
+author: Shayne Fletcher
+maintainer: shayne@shaynefletcher.org
+copyright: Copyright © 2020-2024 Shayne Fletcher. All rights reserved.
+license: BSD-3-Clause
 license-file:   LICENSE
-category:       Development
-synopsis:       Algorithms on GHC parse trees
-build-type:     Simple
+category: Development
+synopsis: Programming with GHC parse trees
+build-type: Simple
 extra-source-files:
-    README.md
-    ChangeLog.md
-    cbits/ghclib_api.h
+    README.md ChangeLog.md cbits/ghclib_api.h
 
 source-repository head
   type: git
@@ -29,9 +27,48 @@
 flag no-ghc-lib
   default: False
   manual: True
-  description: Force dependency on native ghc-libs
+  description: Do not link ghc-lib. Use the native GHC libs
 
+common base
+  default-language: Haskell2010
+  ghc-options:
+    -Wall -Wincomplete-record-updates
+    -Wredundant-constraints -Widentities
+    -Wno-simplifiable-class-constraints
+  build-depends:
+      base >=4.7 && <5
+
+common ghc_libs
+  include-dirs: cbits
+  default-extensions: CPP
+  if flag(auto) && impl(ghc >= 9.10.0) && impl(ghc < 9.11.0)
+    build-depends:
+      ghc == 9.10.*,
+      ghc-boot-th,
+      ghc-boot
+  else
+    if flag(auto)
+      build-depends:
+        ghc-lib-parser == 9.10.*
+    else
+      if flag(no-ghc-lib)
+        build-depends:
+          ghc == 9.10.*,
+          ghc-boot-th,
+          ghc-boot
+      else
+        build-depends:
+          ghc-lib-parser == 9.10.*
+
+common lib
+  import: base, ghc_libs
+  build-depends:
+      uniplate >= 1.5,
+      bytestring >= 0.10.8.2,
+      containers >= 0.5.8.1
+
 library
+  import: lib
   exposed-modules:
       Language.Haskell.GhclibParserEx.Dump
       Language.Haskell.GhclibParserEx.Fixity
@@ -39,6 +76,7 @@
       Language.Haskell.GhclibParserEx.GHC.Driver.Flags
       Language.Haskell.GhclibParserEx.GHC.Driver.Session
       Language.Haskell.GhclibParserEx.GHC.Hs
+      Language.Haskell.GhclibParserEx.GHC.Hs.Dump
       Language.Haskell.GhclibParserEx.GHC.Hs.Expr
       Language.Haskell.GhclibParserEx.GHC.Hs.Pat
       Language.Haskell.GhclibParserEx.GHC.Hs.Type
@@ -50,76 +88,20 @@
       Language.Haskell.GhclibParserEx.GHC.Parser
       Language.Haskell.GhclibParserEx.GHC.Types.Name.Reader
       Language.Haskell.GhclibParserEx.GHC.Utils.Outputable
-  other-modules:
-      Paths_ghc_lib_parser_ex
-  hs-source-dirs:
-      src
+  autogen-modules: Paths_ghc_lib_parser_ex
+  other-modules: Paths_ghc_lib_parser_ex
+  hs-source-dirs: src
+
+common test
+  import: lib
   build-depends:
-      base >=4.7 && <5,
-      uniplate >= 1.5,
-      bytestring >= 0.10.8.2,
-      containers >= 0.5.8.1
-  if flag(auto) && impl(ghc >= 9.8.0) && impl(ghc < 9.9.0)
-    build-depends:
-      ghc == 9.8.*,
-      ghc-boot-th,
-      ghc-boot
-  else
-    if flag(auto)
-      build-depends:
-        ghc-lib-parser == 9.8.*
-    else
-      if flag(no-ghc-lib)
-        build-depends:
-          ghc == 9.8.*,
-          ghc-boot-th,
-          ghc-boot
-      else
-        build-depends:
-          ghc-lib-parser == 9.8.*
-  include-dirs:
-      cbits
-  install-includes:
-      cbits/ghclib_api.h
-  default-language: Haskell2010
-  default-extensions: CPP
+    tasty >= 1.2, tasty-hunit >= 0.10.0, directory >= 1.3.3,
+    filepath >= 1.4.2, extra >=1.6, uniplate >= 1.6.12,
+    ghc-lib-parser-ex
 
 test-suite ghc-lib-parser-ex-test
+  import: test
   type: exitcode-stdio-1.0
-  main-is:
-      Test.hs
-  other-modules:
-      Paths_ghc_lib_parser_ex
-  hs-source-dirs:
-      test
-  include-dirs:
-      cbits
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
-  build-depends:
-      base >=4.7 && <5
-    , tasty >= 1.2
-    , tasty-hunit >= 0.10.0
-    , directory >= 1.3.3
-    , filepath >= 1.4.2
-    , extra >=1.6
-    , uniplate >= 1.6.12
-    , ghc-lib-parser-ex
-  if flag(auto) && impl(ghc >= 9.8.0) && impl(ghc < 9.9.0)
-    build-depends:
-      ghc == 9.8.*,
-      ghc-boot-th,
-      ghc-boot
-  else
-    if flag(auto)
-      build-depends:
-        ghc-lib-parser == 9.8.*
-    else
-      if flag(no-ghc-lib)
-        build-depends:
-          ghc == 9.8.*,
-          ghc-boot-th,
-          ghc-boot
-      else
-        build-depends:
-          ghc-lib-parser == 9.8.*
-  default-language: Haskell2010
+  main-is: Test.hs
+  hs-source-dirs: test
diff --git a/src/Language/Haskell/GhclibParserEx/Dump.hs b/src/Language/Haskell/GhclibParserEx/Dump.hs
--- a/src/Language/Haskell/GhclibParserEx/Dump.hs
+++ b/src/Language/Haskell/GhclibParserEx/Dump.hs
@@ -1,240 +1,9 @@
--- Copyright (c) 2020-2023, Shayne Fletcher. All rights reserved.
+-- Copyright (c) 2024, Shayne Fletcher. All rights reserved.
 -- SPDX-License-Identifier: BSD-3-Clause.
-{-
-(c) The University of Glasgow 2006
-(c) The GRASP/AQUA Project, Glasgow University, 1992-1998
--}
-{- HLINT ignore -} -- Not our code.
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-#include "ghclib_api.h"
-module Language.Haskell.GhclibParserEx.Dump(
-    showAstData
-  , BlankSrcSpan(..)
-#if ! (defined (GHC_9_0) || defined (GHC_8_10) || defined (GHC_8_8) )
-  , BlankEpAnnotations(..)
-#endif
-) where
 
-#if !defined(MIN_VERSION_ghc_lib_parser)
--- Pay attenion: This is the native GHC case.
-
-#  if defined (GHC_8_8)
-import HsDumpAst
-#  else
-import GHC.Hs.Dump
-#  endif
-
-#else
--- Once again, attenion please. This is the ghc-lib-parser case.
-
-#  if !defined (GHC_8_8)
-import GHC.Hs.Dump
-#  else
--- In the 8.8 case reproduce the implementation (the original ended up
--- in ghc-lib).
-
-import Prelude as X hiding ((<>))
-
-import Data.Data hiding (Fixity)
-import Bag
-import BasicTypes
-import FastString
-import NameSet
-import Name
-import DataCon
-import SrcLoc
-import HsSyn
-import OccName hiding (occName)
-import Var
-import Module
-import Outputable
-
-import qualified Data.ByteString as B
-
-data BlankSrcSpan = BlankSrcSpan | NoBlankSrcSpan
-                  deriving (Eq,Show)
-
--- | Show a GHC syntax tree. This parameterised because it is also used for
--- comparing ASTs in ppr roundtripping tests, where the SrcSpan's are blanked
--- out, to avoid comparing locations, only structure
-showAstData :: Data a => BlankSrcSpan -> a -> SDoc
-showAstData b a0 = blankLine $$ showAstData' a0
-  where
-    showAstData' :: Data a => a -> SDoc
-    showAstData' =
-      generic
-              `ext1Q` list
-              `extQ` string `extQ` fastString `extQ` srcSpan
-              `extQ` lit `extQ` litr `extQ` litt
-              `extQ` bytestring
-              `extQ` name `extQ` occName `extQ` moduleName `extQ` var
-              `extQ` dataCon
-              `extQ` bagName `extQ` bagRdrName `extQ` bagVar `extQ` nameSet
-              `extQ` fixity
-              `ext2Q` located
-
-      where generic :: Data a => a -> SDoc
-            generic t = parens $ text (showConstr (toConstr t))
-                                  $$ vcat (gmapQ showAstData' t)
-
-            string :: String -> SDoc
-            string     = text . normalize_newlines . show
-
-            fastString :: FastString -> SDoc
-            fastString s = braces $
-                            text "FastString: "
-                         <> text (normalize_newlines . show $ s)
-
-            bytestring :: B.ByteString -> SDoc
-            bytestring = text . normalize_newlines . show
-
-            list []    = brackets empty
-            list [x]   = brackets (showAstData' x)
-            list (x1 : x2 : xs) =  (text "[" <> showAstData' x1)
-                                $$ go x2 xs
-              where
-                go y [] = text "," <> showAstData' y <> text "]"
-                go y1 (y2 : ys) = (text "," <> showAstData' y1) $$ go y2 ys
-
-            -- Eliminate word-size dependence
-            lit :: HsLit GhcPs -> SDoc
-            lit (HsWordPrim   s x) = numericLit "HsWord{64}Prim" x s
-            lit (HsWord64Prim s x) = numericLit "HsWord{64}Prim" x s
-            lit (HsIntPrim    s x) = numericLit "HsInt{64}Prim"  x s
-            lit (HsInt64Prim  s x) = numericLit "HsInt{64}Prim"  x s
-            lit l                  = generic l
-
-            litr :: HsLit GhcRn -> SDoc
-            litr (HsWordPrim   s x) = numericLit "HsWord{64}Prim" x s
-            litr (HsWord64Prim s x) = numericLit "HsWord{64}Prim" x s
-            litr (HsIntPrim    s x) = numericLit "HsInt{64}Prim"  x s
-            litr (HsInt64Prim  s x) = numericLit "HsInt{64}Prim"  x s
-            litr l                  = generic l
-
-            litt :: HsLit GhcTc -> SDoc
-            litt (HsWordPrim   s x) = numericLit "HsWord{64}Prim" x s
-            litt (HsWord64Prim s x) = numericLit "HsWord{64}Prim" x s
-            litt (HsIntPrim    s x) = numericLit "HsInt{64}Prim"  x s
-            litt (HsInt64Prim  s x) = numericLit "HsInt{64}Prim"  x s
-            litt l                  = generic l
-
-            numericLit :: String -> Integer -> SourceText -> SDoc
-            numericLit tag x s = braces $ hsep [ text tag
-                                               , generic x
-                                               , generic s ]
-
-            name :: Name -> SDoc
-            name nm    = braces $ text "Name: " <> ppr nm
-
-            occName n  =  braces $
-                          text "OccName: "
-                       <> text (OccName.occNameString n)
-
-            moduleName :: ModuleName -> SDoc
-            moduleName m = braces $ text "ModuleName: " <> ppr m
-
-            srcSpan :: SrcSpan -> SDoc
-            srcSpan ss = case b of
-             BlankSrcSpan -> text "{ ss }"
-             NoBlankSrcSpan -> braces $ char ' ' <>
-                             (hang (ppr ss) 1
-                                   -- TODO: show annotations here
-                                   (text ""))
-
-            var  :: Var -> SDoc
-            var v      = braces $ text "Var: " <> ppr v
-
-            dataCon :: DataCon -> SDoc
-            dataCon c  = braces $ text "DataCon: " <> ppr c
-
-            bagRdrName:: Bag (Located (HsBind GhcPs)) -> SDoc
-            bagRdrName bg =  braces $
-                             text "Bag(Located (HsBind GhcPs)):"
-                          $$ (list . bagToList $ bg)
-
-            bagName   :: Bag (Located (HsBind GhcRn)) -> SDoc
-            bagName bg  =  braces $
-                           text "Bag(Located (HsBind Name)):"
-                        $$ (list . bagToList $ bg)
-
-            bagVar    :: Bag (Located (HsBind GhcTc)) -> SDoc
-            bagVar bg  =  braces $
-                          text "Bag(Located (HsBind Var)):"
-                       $$ (list . bagToList $ bg)
-
-            nameSet ns =  braces $
-                          text "NameSet:"
-                       $$ (list . nameSetElemsStable $ ns)
-
-            fixity :: Fixity -> SDoc
-            fixity fx =  braces $
-                         text "Fixity: "
-                      <> ppr fx
-
-            located :: (Data b,Data loc) => GenLocated loc b -> SDoc
-            located (L ss a) = parens $
-                   case cast ss of
-                        Just (s :: SrcSpan) ->
-                          srcSpan s
-                        Nothing -> text "nnnnnnnn"
-                      $$ showAstData' a
-
-normalize_newlines :: String -> String
-normalize_newlines ('\\':'r':'\\':'n':xs) = '\\':'n':normalize_newlines xs
-normalize_newlines (x:xs)                 = x:normalize_newlines xs
-normalize_newlines []                     = []
-
-{-
-************************************************************************
-*                                                                      *
-* Copied from syb
-*                                                                      *
-************************************************************************
--}
-
-
--- | The type constructor for queries
-newtype Q q x = Q { unQ :: x -> q }
-
--- | Extend a generic query by a type-specific case
-extQ :: ( Typeable a
-        , Typeable b
-        )
-     => (a -> q)
-     -> (b -> q)
-     -> a
-     -> q
-extQ f g a = maybe (f a) g (cast a)
-
--- | Type extension of queries for type constructors
-ext1Q :: (Data d, Typeable t)
-      => (d -> q)
-      -> (forall e. Data e => t e -> q)
-      -> d -> q
-ext1Q def ext = unQ ((Q def) `ext1` (Q ext))
-
-
--- | Type extension of queries for type constructors
-ext2Q :: (Data d, Typeable t)
-      => (d -> q)
-      -> (forall d1 d2. (Data d1, Data d2) => t d1 d2 -> q)
-      -> d -> q
-ext2Q def ext = unQ ((Q def) `ext2` (Q ext))
-
--- | Flexible type extension
-ext1 :: (Data a, Typeable t)
-     => c a
-     -> (forall d. Data d => c (t d))
-     -> c a
-ext1 def ext = maybe def id (dataCast1 ext)
+module Language.Haskell.GhclibParserEx.Dump
+  {-# DEPRECATED "Use Language.Haskell.GhclibParserEx.GHC.Hs.Dump instead" #-} (
+  module Language.Haskell.GhclibParserEx.GHC.Hs.Dump
+  ) where
 
--- | Flexible type extension
-ext2 :: (Data a, Typeable t)
-     => c a
-     -> (forall d1 d2. (Data d1, Data d2) => c (t d1 d2))
-     -> c a
-ext2 def ext = maybe def id (dataCast2 ext)
-#  endif
-#endif
+import Language.Haskell.GhclibParserEx.GHC.Hs.Dump
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/Dump.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Dump.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/Dump.hs
@@ -0,0 +1,240 @@
+-- Copyright (c) 2020-2023, Shayne Fletcher. All rights reserved.
+-- SPDX-License-Identifier: BSD-3-Clause.
+{-
+(c) The University of Glasgow 2006
+(c) The GRASP/AQUA Project, Glasgow University, 1992-1998
+-}
+{- HLINT ignore -} -- Not our code.
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+#include "ghclib_api.h"
+module Language.Haskell.GhclibParserEx.GHC.Hs.Dump(
+    showAstData
+  , BlankSrcSpan(..)
+#if ! (defined (GHC_9_0) || defined (GHC_8_10) || defined (GHC_8_8) )
+  , BlankEpAnnotations(..)
+#endif
+) where
+
+#if !defined(MIN_VERSION_ghc_lib_parser)
+-- Pay attenion: This is the native GHC case.
+
+#  if defined (GHC_8_8)
+import HsDumpAst
+#  else
+import GHC.Hs.Dump
+#  endif
+
+#else
+-- Once again, attenion please. This is the ghc-lib-parser case.
+
+#  if !defined (GHC_8_8)
+import GHC.Hs.Dump
+#  else
+-- In the 8.8 case reproduce the implementation (the original ended up
+-- in ghc-lib).
+
+import Prelude as X hiding ((<>))
+
+import Data.Data hiding (Fixity)
+import Bag
+import BasicTypes
+import FastString
+import NameSet
+import Name
+import DataCon
+import SrcLoc
+import HsSyn
+import OccName hiding (occName)
+import Var
+import Module
+import Outputable
+
+import qualified Data.ByteString as B
+
+data BlankSrcSpan = BlankSrcSpan | NoBlankSrcSpan
+                  deriving (Eq,Show)
+
+-- | Show a GHC syntax tree. This parameterised because it is also used for
+-- comparing ASTs in ppr roundtripping tests, where the SrcSpan's are blanked
+-- out, to avoid comparing locations, only structure
+showAstData :: Data a => BlankSrcSpan -> a -> SDoc
+showAstData b a0 = blankLine $$ showAstData' a0
+  where
+    showAstData' :: Data a => a -> SDoc
+    showAstData' =
+      generic
+              `ext1Q` list
+              `extQ` string `extQ` fastString `extQ` srcSpan
+              `extQ` lit `extQ` litr `extQ` litt
+              `extQ` bytestring
+              `extQ` name `extQ` occName `extQ` moduleName `extQ` var
+              `extQ` dataCon
+              `extQ` bagName `extQ` bagRdrName `extQ` bagVar `extQ` nameSet
+              `extQ` fixity
+              `ext2Q` located
+
+      where generic :: Data a => a -> SDoc
+            generic t = parens $ text (showConstr (toConstr t))
+                                  $$ vcat (gmapQ showAstData' t)
+
+            string :: String -> SDoc
+            string     = text . normalize_newlines . show
+
+            fastString :: FastString -> SDoc
+            fastString s = braces $
+                            text "FastString: "
+                         <> text (normalize_newlines . show $ s)
+
+            bytestring :: B.ByteString -> SDoc
+            bytestring = text . normalize_newlines . show
+
+            list []    = brackets empty
+            list [x]   = brackets (showAstData' x)
+            list (x1 : x2 : xs) =  (text "[" <> showAstData' x1)
+                                $$ go x2 xs
+              where
+                go y [] = text "," <> showAstData' y <> text "]"
+                go y1 (y2 : ys) = (text "," <> showAstData' y1) $$ go y2 ys
+
+            -- Eliminate word-size dependence
+            lit :: HsLit GhcPs -> SDoc
+            lit (HsWordPrim   s x) = numericLit "HsWord{64}Prim" x s
+            lit (HsWord64Prim s x) = numericLit "HsWord{64}Prim" x s
+            lit (HsIntPrim    s x) = numericLit "HsInt{64}Prim"  x s
+            lit (HsInt64Prim  s x) = numericLit "HsInt{64}Prim"  x s
+            lit l                  = generic l
+
+            litr :: HsLit GhcRn -> SDoc
+            litr (HsWordPrim   s x) = numericLit "HsWord{64}Prim" x s
+            litr (HsWord64Prim s x) = numericLit "HsWord{64}Prim" x s
+            litr (HsIntPrim    s x) = numericLit "HsInt{64}Prim"  x s
+            litr (HsInt64Prim  s x) = numericLit "HsInt{64}Prim"  x s
+            litr l                  = generic l
+
+            litt :: HsLit GhcTc -> SDoc
+            litt (HsWordPrim   s x) = numericLit "HsWord{64}Prim" x s
+            litt (HsWord64Prim s x) = numericLit "HsWord{64}Prim" x s
+            litt (HsIntPrim    s x) = numericLit "HsInt{64}Prim"  x s
+            litt (HsInt64Prim  s x) = numericLit "HsInt{64}Prim"  x s
+            litt l                  = generic l
+
+            numericLit :: String -> Integer -> SourceText -> SDoc
+            numericLit tag x s = braces $ hsep [ text tag
+                                               , generic x
+                                               , generic s ]
+
+            name :: Name -> SDoc
+            name nm    = braces $ text "Name: " <> ppr nm
+
+            occName n  =  braces $
+                          text "OccName: "
+                       <> text (OccName.occNameString n)
+
+            moduleName :: ModuleName -> SDoc
+            moduleName m = braces $ text "ModuleName: " <> ppr m
+
+            srcSpan :: SrcSpan -> SDoc
+            srcSpan ss = case b of
+             BlankSrcSpan -> text "{ ss }"
+             NoBlankSrcSpan -> braces $ char ' ' <>
+                             (hang (ppr ss) 1
+                                   -- TODO: show annotations here
+                                   (text ""))
+
+            var  :: Var -> SDoc
+            var v      = braces $ text "Var: " <> ppr v
+
+            dataCon :: DataCon -> SDoc
+            dataCon c  = braces $ text "DataCon: " <> ppr c
+
+            bagRdrName:: Bag (Located (HsBind GhcPs)) -> SDoc
+            bagRdrName bg =  braces $
+                             text "Bag(Located (HsBind GhcPs)):"
+                          $$ (list . bagToList $ bg)
+
+            bagName   :: Bag (Located (HsBind GhcRn)) -> SDoc
+            bagName bg  =  braces $
+                           text "Bag(Located (HsBind Name)):"
+                        $$ (list . bagToList $ bg)
+
+            bagVar    :: Bag (Located (HsBind GhcTc)) -> SDoc
+            bagVar bg  =  braces $
+                          text "Bag(Located (HsBind Var)):"
+                       $$ (list . bagToList $ bg)
+
+            nameSet ns =  braces $
+                          text "NameSet:"
+                       $$ (list . nameSetElemsStable $ ns)
+
+            fixity :: Fixity -> SDoc
+            fixity fx =  braces $
+                         text "Fixity: "
+                      <> ppr fx
+
+            located :: (Data b,Data loc) => GenLocated loc b -> SDoc
+            located (L ss a) = parens $
+                   case cast ss of
+                        Just (s :: SrcSpan) ->
+                          srcSpan s
+                        Nothing -> text "nnnnnnnn"
+                      $$ showAstData' a
+
+normalize_newlines :: String -> String
+normalize_newlines ('\\':'r':'\\':'n':xs) = '\\':'n':normalize_newlines xs
+normalize_newlines (x:xs)                 = x:normalize_newlines xs
+normalize_newlines []                     = []
+
+{-
+************************************************************************
+*                                                                      *
+* Copied from syb
+*                                                                      *
+************************************************************************
+-}
+
+
+-- | The type constructor for queries
+newtype Q q x = Q { unQ :: x -> q }
+
+-- | Extend a generic query by a type-specific case
+extQ :: ( Typeable a
+        , Typeable b
+        )
+     => (a -> q)
+     -> (b -> q)
+     -> a
+     -> q
+extQ f g a = maybe (f a) g (cast a)
+
+-- | Type extension of queries for type constructors
+ext1Q :: (Data d, Typeable t)
+      => (d -> q)
+      -> (forall e. Data e => t e -> q)
+      -> d -> q
+ext1Q def ext = unQ ((Q def) `ext1` (Q ext))
+
+
+-- | Type extension of queries for type constructors
+ext2Q :: (Data d, Typeable t)
+      => (d -> q)
+      -> (forall d1 d2. (Data d1, Data d2) => t d1 d2 -> q)
+      -> d -> q
+ext2Q def ext = unQ ((Q def) `ext2` (Q ext))
+
+-- | Flexible type extension
+ext1 :: (Data a, Typeable t)
+     => c a
+     -> (forall d. Data d => c (t d))
+     -> c a
+ext1 def ext = maybe def id (dataCast1 ext)
+
+-- | Flexible type extension
+ext2 :: (Data a, Typeable t)
+     => c a
+     -> (forall d1 d2. (Data d1, Data d2) => c (t d1 d2))
+     -> c a
+ext2 def ext = maybe def id (dataCast2 ext)
+#  endif
+#endif
diff --git a/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs b/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs
--- a/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs
+++ b/src/Language/Haskell/GhclibParserEx/GHC/Hs/ExtendInstances.hs
@@ -24,7 +24,7 @@
 #endif
 import Data.Data
 import Data.Function
-import Language.Haskell.GhclibParserEx.Dump
+import Language.Haskell.GhclibParserEx.GHC.Hs.Dump
 
 newtype HsExtendInstances a =
   HsExtendInstances { unextendInstances :: a }
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -26,7 +26,7 @@
 import GHC.Types.Error
 #endif
 
-import Language.Haskell.GhclibParserEx.Dump
+import Language.Haskell.GhclibParserEx.GHC.Hs.Dump
 import Language.Haskell.GhclibParserEx.Fixity
 import Language.Haskell.GhclibParserEx.GHC.Settings.Config
 import Language.Haskell.GhclibParserEx.GHC.Parser
