diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 See full history at: <https://github.com/faylang/fay/commits>
 
+#### 0.23.1.13
+
+* Add support for haskell-src-exts 1.18.1.
+
 #### 0.23.1.12
 
 * Fix compilation on GHC < 7.8.
diff --git a/fay.cabal b/fay.cabal
--- a/fay.cabal
+++ b/fay.cabal
@@ -1,5 +1,5 @@
 name:                fay
-version:             0.23.1.12
+version:             0.23.1.13
 synopsis:            A compiler for Fay, a Haskell subset that compiles to JavaScript.
 description:         Fay is a proper subset of Haskell which is type-checked
                      with GHC, and compiled to JavaScript. It is lazy, pure, has a Fay monad,
@@ -135,30 +135,30 @@
     Paths_fay
 
   build-depends:
-      base >= 4.5 && < 4.9
+      base >= 4.5 && < 4.10
     , base-compat >= 0.8 && < 0.10
-    , aeson > 0.6 && < 0.11
+    , aeson > 0.6 && < 1.1
     , bytestring >= 0.9 && < 0.11
     , containers >= 0.4 && < 0.6
-    , data-default >= 0.2 && < 0.6
+    , data-default >= 0.2 && < 0.8
     , data-lens-light == 0.1.*
     , directory >= 1.1 && < 1.3
     , filepath >= 1.3 && < 1.5
     , ghc-paths == 0.1.*
-    , haskell-src-exts == 1.17.*
+    , haskell-src-exts >= 1.18.1 && < 1.19
     , language-ecmascript >= 0.15 && < 0.18
     , mtl >= 2.1 && < 2.3
     , mtl-compat >= 0.1 && < 0.3
-    , process >= 1.1 && < 1.3
+    , process >= 1.1 && < 1.5
     , safe >= 0.2 && < 0.4
     , sourcemap == 0.1.*
     , split >= 0.1 && < 0.3
     , spoon >= 0.1 && < 0.4
     , syb >= 0.3 && < 0.7
     , text >= 0.11 && < 1.3
-    , time >= 1.4 && < 1.6
-    , transformers >= 0.3 && < 0.4 || > 0.4.1 && < 0.5
-    , transformers-compat >= 0.3 && < 0.5
+    , time >= 1.4 && < 1.7
+    , transformers >= 0.3 && < 0.4 || > 0.4.1 && < 0.7
+    , transformers-compat >= 0.3 && < 0.6
     , traverse-with-class >= 0.1 && < 0.3
     , type-eq >= 0.1 && < 0.6
     , uniplate >= 1.6.11 && < 1.7
@@ -200,7 +200,6 @@
       , directory
       , fay
       , filepath
-      , groom == 0.1.*
       , haskell-src-exts
       , random >= 1.0 && < 1.2
       , tasty >= 0.9 && < 0.12
diff --git a/src/Fay.hs b/src/Fay.hs
--- a/src/Fay.hs
+++ b/src/Fay.hs
@@ -36,8 +36,8 @@
 
 import           Data.Aeson                             (encode)
 import qualified Data.ByteString.Lazy                   as L
-import           Language.Haskell.Exts.Annotated        (prettyPrint)
-import           Language.Haskell.Exts.Annotated.Syntax
+import           Language.Haskell.Exts        (prettyPrint)
+import           Language.Haskell.Exts.Syntax
 import           Language.Haskell.Exts.SrcLoc
 import           Paths_fay
 import           SourceMap                              (generate)
diff --git a/src/Fay/Compiler.hs b/src/Fay/Compiler.hs
--- a/src/Fay/Compiler.hs
+++ b/src/Fay/Compiler.hs
@@ -46,7 +46,7 @@
 import           Control.Monad.RWS               (gets, modify)
 
 import qualified Data.Set                        as S
-import           Language.Haskell.Exts.Annotated hiding (name)
+import           Language.Haskell.Exts hiding (name)
 import           Language.Haskell.Names          (annotateModule)
 
 --------------------------------------------------------------------------------
diff --git a/src/Fay/Compiler/Decl.hs b/src/Fay/Compiler/Decl.hs
--- a/src/Fay/Compiler/Decl.hs
+++ b/src/Fay/Compiler/Decl.hs
@@ -23,7 +23,7 @@
 
 import           Control.Monad.Except            (throwError)
 import           Control.Monad.RWS               (gets, modify)
-import           Language.Haskell.Exts.Annotated hiding (binds, loc, name)
+import           Language.Haskell.Exts hiding (binds, loc, name)
 
 -- | Compile Haskell declaration.
 compileDecls :: Bool -> [S.Decl] -> Compile [JsStmt]
diff --git a/src/Fay/Compiler/Desugar.hs b/src/Fay/Compiler/Desugar.hs
--- a/src/Fay/Compiler/Desugar.hs
+++ b/src/Fay/Compiler/Desugar.hs
@@ -21,7 +21,7 @@
 import           Control.Monad.Except            (throwError)
 import           Control.Monad.Reader            (asks)
 import qualified Data.Generics.Uniplate.Data     as U
-import           Language.Haskell.Exts.Annotated hiding (binds, loc, name)
+import           Language.Haskell.Exts hiding (binds, loc, name)
 
 -- | Top level, desugar a whole module possibly returning errors
 desugar :: (Data l, Typeable l) => l -> Module l -> IO (Either CompileError (Module l))
diff --git a/src/Fay/Compiler/Desugar/Name.hs b/src/Fay/Compiler/Desugar/Name.hs
--- a/src/Fay/Compiler/Desugar/Name.hs
+++ b/src/Fay/Compiler/Desugar/Name.hs
@@ -9,7 +9,7 @@
 import           Fay.Compiler.Desugar.Types
 
 import           Control.Monad.Reader            (asks, local)
-import           Language.Haskell.Exts.Annotated (Name (..))
+import           Language.Haskell.Exts (Name (..))
 
 -- | Generate a temporary, SCOPED name for testing conditions and
 -- such. We don't have name tracking yet, so instead we use this.
diff --git a/src/Fay/Compiler/Exp.hs b/src/Fay/Compiler/Exp.hs
--- a/src/Fay/Compiler/Exp.hs
+++ b/src/Fay/Compiler/Exp.hs
@@ -30,7 +30,7 @@
 import           Control.Monad.Except            (throwError)
 import           Control.Monad.RWS               (asks, gets)
 import qualified Data.Char                       as Char
-import           Language.Haskell.Exts.Annotated hiding (alt, binds, name, op)
+import           Language.Haskell.Exts hiding (alt, binds, name, op)
 import           Language.Haskell.Names          (NameInfo (RecExpWildcard), Scoped (Scoped))
 
 -- | Compile Haskell expression.
diff --git a/src/Fay/Compiler/FFI.hs b/src/Fay/Compiler/FFI.hs
--- a/src/Fay/Compiler/FFI.hs
+++ b/src/Fay/Compiler/FFI.hs
@@ -18,20 +18,20 @@
 import           Fay.Compiler.Prelude
 
 import           Fay.Compiler.Misc
-import           Fay.Compiler.Print                     (printJSString)
+import           Fay.Compiler.Print           (printJSString)
 import           Fay.Compiler.QName
-import           Fay.Exts.NoAnnotation                  (unAnn)
-import qualified Fay.Exts.NoAnnotation                  as N
-import qualified Fay.Exts.Scoped                        as S
+import           Fay.Exts.NoAnnotation        (unAnn)
+import qualified Fay.Exts.NoAnnotation        as N
+import qualified Fay.Exts.Scoped              as S
 import           Fay.Types
 
-import           Control.Monad.Except                   (throwError)
-import           Control.Monad.Writer                   (tell)
+import           Control.Monad.Except         (throwError)
+import           Control.Monad.Writer         (tell)
 import           Data.Generics.Schemes
-import           Language.ECMAScript3.Parser            as JS
+import           Language.ECMAScript3.Parser  as JS
 import           Language.ECMAScript3.Syntax
-import           Language.Haskell.Exts.Annotated        (SrcSpanInfo, prettyPrint)
-import           Language.Haskell.Exts.Annotated.Syntax
+import           Language.Haskell.Exts        (SrcSpanInfo, prettyPrint)
+import           Language.Haskell.Exts.Syntax
 
 -- | Compile an FFI expression (also used when compiling top level definitions).
 compileFFIExp :: SrcSpanInfo -> Maybe (Name a) -> String -> S.Type -> Compile JsExp
@@ -56,7 +56,10 @@
       TyParArray _ t    -> TyParArray () <$> rmNewtys t
       TyEquals _ t1 t2  -> TyEquals () <$> rmNewtys t1 <*> rmNewtys t2
       TySplice {}       -> return $ unAnn typ
-      TyBang _ bt t     -> TyBang () (unAnn bt) <$> rmNewtys t
+      TyBang _ bt unp t -> TyBang () (unAnn bt) (unAnn unp) <$> rmNewtys t
+      TyWildCard _ _    -> error "TyWildCard not supported"
+      TyQuasiQuote _ _ _ -> error "TyQuasiQuote not supported"
+
     compileFFI' :: N.Type -> Compile JsExp
     compileFFI' sig = do
       let name = fromMaybe "<exp>" nameopt
diff --git a/src/Fay/Compiler/GADT.hs b/src/Fay/Compiler/GADT.hs
--- a/src/Fay/Compiler/GADT.hs
+++ b/src/Fay/Compiler/GADT.hs
@@ -4,7 +4,7 @@
   (convertGADT
   ) where
 
-import           Language.Haskell.Exts.Annotated hiding (name)
+import           Language.Haskell.Exts hiding (name)
 
 -- | Convert a GADT to a normal data type.
 convertGADT :: GadtDecl a -> QualConDecl a
diff --git a/src/Fay/Compiler/Import.hs b/src/Fay/Compiler/Import.hs
--- a/src/Fay/Compiler/Import.hs
+++ b/src/Fay/Compiler/Import.hs
@@ -22,7 +22,7 @@
 
 import           Control.Monad.Except            (throwError)
 import           Control.Monad.RWS               (ask, get, gets, lift, listen, modify)
-import           Language.Haskell.Exts.Annotated hiding (name, var)
+import           Language.Haskell.Exts hiding (name, var)
 import           System.Directory
 import           System.FilePath
 
diff --git a/src/Fay/Compiler/InitialPass.hs b/src/Fay/Compiler/InitialPass.hs
--- a/src/Fay/Compiler/InitialPass.hs
+++ b/src/Fay/Compiler/InitialPass.hs
@@ -22,7 +22,7 @@
 import           Control.Monad.Except            (throwError)
 import           Control.Monad.RWS               (modify)
 import qualified Data.Map                        as M
-import           Language.Haskell.Exts.Annotated hiding (name, var)
+import           Language.Haskell.Exts hiding (name, var)
 import qualified Language.Haskell.Names          as HN (getInterfaces)
 
 -- | Preprocess and collect all information needed during code generation.
diff --git a/src/Fay/Compiler/Misc.hs b/src/Fay/Compiler/Misc.hs
--- a/src/Fay/Compiler/Misc.hs
+++ b/src/Fay/Compiler/Misc.hs
@@ -23,7 +23,7 @@
 import           Control.Monad.Except            (runExceptT, throwError)
 import           Control.Monad.RWS               (asks, gets, modify, runRWST)
 import           Data.Version                    (parseVersion)
-import           Language.Haskell.Exts.Annotated hiding (name)
+import           Language.Haskell.Exts hiding (name)
 import           Language.Haskell.Names          (GName (GName), NameInfo (GlobalValue, LocalValue, ScopeError),
                                                   OrigName, Scoped (Scoped), origGName, origName)
 import           System.IO
diff --git a/src/Fay/Compiler/Optimizer.hs b/src/Fay/Compiler/Optimizer.hs
--- a/src/Fay/Compiler/Optimizer.hs
+++ b/src/Fay/Compiler/Optimizer.hs
@@ -16,7 +16,7 @@
 import           Control.Monad.State             (State, modify, runState)
 import           Control.Monad.Writer            (runWriter, tell)
 import qualified Fay.Exts.NoAnnotation           as N
-import           Language.Haskell.Exts.Annotated hiding (app, name, op)
+import           Language.Haskell.Exts hiding (app, name, op)
 
 -- | The arity of a function. Arity here is defined to be the number
 -- of arguments that can be directly uncurried from a curried lambda
diff --git a/src/Fay/Compiler/Parse.hs b/src/Fay/Compiler/Parse.hs
--- a/src/Fay/Compiler/Parse.hs
+++ b/src/Fay/Compiler/Parse.hs
@@ -3,7 +3,7 @@
   , defaultExtensions
   ) where
 
-import           Language.Haskell.Exts.Annotated hiding (name)
+import           Language.Haskell.Exts hiding (name)
 
 -- | Parse some Fay code.
 parseFay :: Parseable ast => FilePath -> String -> ParseResult ast
diff --git a/src/Fay/Compiler/Pattern.hs b/src/Fay/Compiler/Pattern.hs
--- a/src/Fay/Compiler/Pattern.hs
+++ b/src/Fay/Compiler/Pattern.hs
@@ -17,7 +17,7 @@
 
 import           Control.Monad.Except            (throwError)
 import           Control.Monad.Reader            (ask)
-import           Language.Haskell.Exts.Annotated hiding (name)
+import           Language.Haskell.Exts hiding (name)
 import           Language.Haskell.Names          (NameInfo (RecPatWildcard), Scoped (Scoped))
 
 -- | Compile the given pattern against the given expression.
diff --git a/src/Fay/Compiler/PrimOp.hs b/src/Fay/Compiler/PrimOp.hs
--- a/src/Fay/Compiler/PrimOp.hs
+++ b/src/Fay/Compiler/PrimOp.hs
@@ -29,7 +29,7 @@
 
 import           Data.Map                        (Map)
 import qualified Data.Map                        as M
-import           Language.Haskell.Exts.Annotated hiding (binds, name)
+import           Language.Haskell.Exts hiding (binds, name)
 
 -- | Make an identifier from the built-in HJ module.
 fayBuiltin :: a -> String -> QName a
diff --git a/src/Fay/Compiler/Print.hs b/src/Fay/Compiler/Print.hs
--- a/src/Fay/Compiler/Print.hs
+++ b/src/Fay/Compiler/Print.hs
@@ -15,7 +15,7 @@
 
 import           Data.Aeson.Encode
 import qualified Data.ByteString.Lazy.UTF8       as UTF8
-import           Language.Haskell.Exts.Annotated hiding (alt, name, op, sym)
+import           Language.Haskell.Exts hiding (alt, name, op, sym)
 
 --------------------------------------------------------------------------------
 -- Printing
diff --git a/src/Fay/Compiler/QName.hs b/src/Fay/Compiler/QName.hs
--- a/src/Fay/Compiler/QName.hs
+++ b/src/Fay/Compiler/QName.hs
@@ -2,7 +2,7 @@
 
 module Fay.Compiler.QName where
 
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | Extract the module name from a qualified name.
 qModName :: QName a -> Maybe (ModuleName a)
diff --git a/src/Fay/Config.hs b/src/Fay/Config.hs
--- a/src/Fay/Config.hs
+++ b/src/Fay/Config.hs
@@ -45,7 +45,7 @@
 
 import           Data.Default
 import           Data.Maybe                      ()
-import           Language.Haskell.Exts.Annotated (ModuleName (..))
+import           Language.Haskell.Exts (ModuleName (..))
 import           System.Environment
 
 -- | Configuration of the compiler.
diff --git a/src/Fay/Exts.hs b/src/Fay/Exts.hs
--- a/src/Fay/Exts.hs
+++ b/src/Fay/Exts.hs
@@ -1,6 +1,6 @@
 module Fay.Exts where
 
-import qualified Language.Haskell.Exts.Annotated as A
+import qualified Language.Haskell.Exts as A
 
 type X = A.SrcSpanInfo
 
diff --git a/src/Fay/Exts/NoAnnotation.hs b/src/Fay/Exts/NoAnnotation.hs
--- a/src/Fay/Exts/NoAnnotation.hs
+++ b/src/Fay/Exts/NoAnnotation.hs
@@ -6,7 +6,7 @@
 
 import           Data.List.Split                 (splitOn)
 import           Data.String
-import qualified Language.Haskell.Exts.Annotated as A
+import qualified Language.Haskell.Exts as A
 
 type Alt = A.Alt ()
 type BangType = A.BangType ()
diff --git a/src/Fay/Exts/Scoped.hs b/src/Fay/Exts/Scoped.hs
--- a/src/Fay/Exts/Scoped.hs
+++ b/src/Fay/Exts/Scoped.hs
@@ -2,7 +2,7 @@
 
 import qualified Fay.Exts                        as F
 
-import qualified Language.Haskell.Exts.Annotated as A
+import qualified Language.Haskell.Exts as A
 import qualified Language.Haskell.Names          as HN (Scoped (Scoped), NameInfo (None))
 
 
diff --git a/src/Fay/Types/CompileError.hs b/src/Fay/Types/CompileError.hs
--- a/src/Fay/Types/CompileError.hs
+++ b/src/Fay/Types/CompileError.hs
@@ -4,7 +4,7 @@
 import qualified Fay.Exts.NoAnnotation           as N
 import qualified Fay.Exts.Scoped                 as S
 
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | Error type.
 data CompileError
diff --git a/src/Fay/Types/Js.hs b/src/Fay/Types/Js.hs
--- a/src/Fay/Types/Js.hs
+++ b/src/Fay/Types/Js.hs
@@ -11,7 +11,7 @@
 import           Fay.Types.ModulePath
 
 import           Data.String
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | Statement type.
 data JsStmt
diff --git a/src/Fay/Types/ModulePath.hs b/src/Fay/Types/ModulePath.hs
--- a/src/Fay/Types/ModulePath.hs
+++ b/src/Fay/Types/ModulePath.hs
@@ -10,7 +10,7 @@
 
 import           Data.List
 import           Data.List.Split
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | The name of a module split into a list for code generation.
 newtype ModulePath = ModulePath { unModulePath :: [String] }
diff --git a/src/Fay/Types/Printer.hs b/src/Fay/Types/Printer.hs
--- a/src/Fay/Types/Printer.hs
+++ b/src/Fay/Types/Printer.hs
@@ -19,7 +19,7 @@
 import Control.Monad.RWS
 import Data.List                       (elemIndex)
 import Data.String
-import Language.Haskell.Exts.Annotated
+import Language.Haskell.Exts
 import SourceMap.Types
 
 -- | Global options of the printer
diff --git a/src/haskell-names/Language/Haskell/Names/Annotated.hs b/src/haskell-names/Language/Haskell/Names/Annotated.hs
--- a/src/haskell-names/Language/Haskell/Names/Annotated.hs
+++ b/src/haskell-names/Language/Haskell/Names/Annotated.hs
@@ -27,7 +27,7 @@
 
 import           Data.Lens.Light
 import           Data.Proxy
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 import           Type.Eq
 
 annotate
diff --git a/src/haskell-names/Language/Haskell/Names/Exports.hs b/src/haskell-names/Language/Haskell/Names/Exports.hs
--- a/src/haskell-names/Language/Haskell/Names/Exports.hs
+++ b/src/haskell-names/Language/Haskell/Names/Exports.hs
@@ -19,7 +19,7 @@
 import           Control.Monad.Writer                     (WriterT (WriterT), runWriterT)
 import qualified Data.Map                                 as Map
 import qualified Data.Set                                 as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 processExports
   :: (MonadModule m, ModuleInfo m ~ Symbols, Data l, Eq l)
@@ -70,8 +70,7 @@
             (EAbs (Scoped (Export s) l) (noScope ns)
               (Scoped (GlobalType i) <$> qn), s)
         Global.Special {} -> error "Global.Special in export list?"
-    EAbs _ NoNamespace{} _ -> error "resolveExportSpec: 'type' namespace is not supported yet" -- FIXME
-    EThingAll l qn -> return $
+    EThingWith l (EWildcard wcl wcn) qn [] -> return $
       case Global.lookupType qn tbl of
         Global.Error err ->
           (scopeError err exp, mempty)
@@ -84,11 +83,15 @@
               , n' == st_origName i ]
             s = mkTy i <> subs
           in
-            ( EThingAll (Scoped (Export s) l) (Scoped (GlobalType i) <$> qn)
+            ( EThingWith (Scoped (Export s) l)
+                         (EWildcard (Scoped (Export s) wcl) wcn)
+                         (Scoped (GlobalType i) <$> qn)
+                         []
             , s
             )
         Global.Special {} -> error "Global.Special in export list?"
-    EThingWith l qn cns -> return $
+    EThingWith l (EWildcard _ _) _cns -> error "Name resolution: CNames are not supported in wildcard exports"
+    EThingWith l (NoWildcard wcl) qn cns -> return $
       case Global.lookupType qn tbl of
         Global.Error err ->
           (scopeError err exp, mempty)
@@ -102,7 +105,10 @@
                 cns
             s = mkTy i <> subs
           in
-            ( EThingWith (Scoped (Export s) l) (Scoped (GlobalType i) <$> qn) cns'
+            ( EThingWith (Scoped (Export s) l)
+                         (NoWildcard (Scoped (Export s) wcl))
+                         (Scoped (GlobalType i) <$> qn)
+                         cns'
             , s
             )
         Global.Special {} -> error "Global.Special in export list?"
diff --git a/src/haskell-names/Language/Haskell/Names/GetBound.hs b/src/haskell-names/Language/Haskell/Names/GetBound.hs
--- a/src/haskell-names/Language/Haskell/Names/GetBound.hs
+++ b/src/haskell-names/Language/Haskell/Names/GetBound.hs
@@ -15,7 +15,7 @@
 import           Language.Haskell.Names.SyntaxUtils
 
 import           Data.Generics.Uniplate.Data
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 
 -- | Get bound value identifiers.
diff --git a/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs b/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs
--- a/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs
+++ b/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs
@@ -20,7 +20,7 @@
 import           Data.Lens.Light
 import qualified Data.Map                           as Map
 import qualified Data.Set                           as Set
-import           Language.Haskell.Exts.Annotated    as HSE
+import           Language.Haskell.Exts    as HSE
 
 -- | Global symbol table — contains global names
 data Table =
diff --git a/src/haskell-names/Language/Haskell/Names/Imports.hs b/src/haskell-names/Language/Haskell/Names/Imports.hs
--- a/src/haskell-names/Language/Haskell/Names/Imports.hs
+++ b/src/haskell-names/Language/Haskell/Names/Imports.hs
@@ -18,7 +18,7 @@
 import           Data.Lens.Light
 import qualified Data.Map                                 as Map
 import qualified Data.Set                                 as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 instance ModName (ModuleName l) where
   modToString (ModuleName _ s) = s
diff --git a/src/haskell-names/Language/Haskell/Names/LocalSymbolTable.hs b/src/haskell-names/Language/Haskell/Names/LocalSymbolTable.hs
--- a/src/haskell-names/Language/Haskell/Names/LocalSymbolTable.hs
+++ b/src/haskell-names/Language/Haskell/Names/LocalSymbolTable.hs
@@ -13,7 +13,7 @@
 import           Language.Haskell.Names.Types
 
 import qualified Data.Map                           as Map
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | Local symbol table — contains locally bound names
 newtype Table = Table (Map.Map NameS SrcLoc)
diff --git a/src/haskell-names/Language/Haskell/Names/ModuleSymbols.hs b/src/haskell-names/Language/Haskell/Names/ModuleSymbols.hs
--- a/src/haskell-names/Language/Haskell/Names/ModuleSymbols.hs
+++ b/src/haskell-names/Language/Haskell/Names/ModuleSymbols.hs
@@ -7,7 +7,7 @@
   )
   where
 
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 import           Language.Haskell.Names.GetBound
 import qualified Language.Haskell.Names.GlobalSymbolTable as Global
 import           Language.Haskell.Names.ScopeUtils
@@ -74,7 +74,7 @@
       let tn = hname dh
       in  [ Right (SymType        { st_origName = tn, st_fixity = Nothing })]
 
-    TypeFamDecl _ dh _ ->
+    TypeFamDecl _loc dh _mrs _mk ->
       let tn = hname dh
       in  [ Right (SymTypeFam     { st_origName = tn, st_fixity = Nothing })]
 
@@ -121,7 +121,7 @@
         cdecls = fromMaybe [] mds
       in
           Right (SymClass   { st_origName = cq,       st_fixity = Nothing }) :
-        [ Right (SymTypeFam { st_origName = hname dh, st_fixity = Nothing }) | ClsTyFam   _   dh _ <- cdecls ] ++
+        [ Right (SymTypeFam { st_origName = hname dh, st_fixity = Nothing }) | ClsTyFam   _   dh _ _ <- cdecls ] ++
         [ Right (SymDataFam { st_origName = hname dh, st_fixity = Nothing }) | ClsDataFam _ _ dh _ <- cdecls ] ++
         [ Left  (SymMethod  { sv_origName = qname mn, sv_fixity = Nothing, sv_className = cq }) | mn <- ms ]
 
@@ -139,6 +139,7 @@
   where
     ModuleName _ smdl = mdl
     qname = GName smdl . nameToString
+    hname :: DeclHead l -> GName
     hname = qname . getDeclHeadName
     dataOrNewCon dataOrNew = case dataOrNew of DataType {} -> SymData; NewType {} -> SymNewType
 
diff --git a/src/haskell-names/Language/Haskell/Names/Open/Base.hs b/src/haskell-names/Language/Haskell/Names/Open/Base.hs
--- a/src/haskell-names/Language/Haskell/Names/Open/Base.hs
+++ b/src/haskell-names/Language/Haskell/Names/Open/Base.hs
@@ -1,7 +1,7 @@
 -- | This module provides a more flexible way to process Haskell code —
 -- using an open-recursive traversal.
 --
--- You can look at "Language.Haskell.Exts.Annotated" source as an example
+-- You can look at "Language.Haskell.Exts" source as an example
 -- of how to use this module.
 {-# OPTIONS -fno-warn-name-shadowing #-}
 {-# LANGUAGE DataKinds             #-}
@@ -49,7 +49,7 @@
 import           Data.Generics.Traversable
 import           Data.Lens.Light
 import           GHC.Exts                                 (Constraint)
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | Describes how we should treat names in the current context
 data NameContext
diff --git a/src/haskell-names/Language/Haskell/Names/Open/Derived.hs b/src/haskell-names/Language/Haskell/Names/Open/Derived.hs
--- a/src/haskell-names/Language/Haskell/Names/Open/Derived.hs
+++ b/src/haskell-names/Language/Haskell/Names/Open/Derived.hs
@@ -7,7 +7,7 @@
 module Language.Haskell.Names.Open.Derived where
 
 import           Data.Generics.Traversable.TH
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 deriveGTraversable ''ModuleName
 deriveGTraversable ''SpecialCon
@@ -82,3 +82,6 @@
 deriveGTraversable ''Namespace
 deriveGTraversable ''Role
 deriveGTraversable ''PatternSynDirection
+deriveGTraversable ''Unpackedness
+deriveGTraversable ''ResultSig
+deriveGTraversable ''InjectivityInfo
diff --git a/src/haskell-names/Language/Haskell/Names/Open/Instances.hs b/src/haskell-names/Language/Haskell/Names/Open/Instances.hs
--- a/src/haskell-names/Language/Haskell/Names/Open/Instances.hs
+++ b/src/haskell-names/Language/Haskell/Names/Open/Instances.hs
@@ -22,7 +22,7 @@
 
 import           Data.Lens.Light
 import qualified Data.Traversable                       as T
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 c :: Applicative w => c -> w c
 c = pure
diff --git a/src/haskell-names/Language/Haskell/Names/RecordWildcards.hs b/src/haskell-names/Language/Haskell/Names/RecordWildcards.hs
--- a/src/haskell-names/Language/Haskell/Names/RecordWildcards.hs
+++ b/src/haskell-names/Language/Haskell/Names/RecordWildcards.hs
@@ -20,7 +20,7 @@
 import qualified Data.Map                                 as Map
 import           Data.Maybe
 import qualified Data.Set                                 as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 -- | Information about the names being introduced by a record wildcard
 --
diff --git a/src/haskell-names/Language/Haskell/Names/Recursive.hs b/src/haskell-names/Language/Haskell/Names/Recursive.hs
--- a/src/haskell-names/Language/Haskell/Names/Recursive.hs
+++ b/src/haskell-names/Language/Haskell/Names/Recursive.hs
@@ -24,7 +24,7 @@
 import           Data.Maybe
 import           Data.Monoid
 import qualified Data.Set                             as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 
 -- | Take a set of modules and return a list of sets, where each sets for
diff --git a/src/haskell-names/Language/Haskell/Names/ScopeUtils.hs b/src/haskell-names/Language/Haskell/Names/ScopeUtils.hs
--- a/src/haskell-names/Language/Haskell/Names/ScopeUtils.hs
+++ b/src/haskell-names/Language/Haskell/Names/ScopeUtils.hs
@@ -15,7 +15,7 @@
 
 import           Data.Lens.Light
 import qualified Data.Set                                 as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 scopeError :: Functor f => Error l -> f l -> f (Scoped l)
 scopeError e f = Scoped (ScopeError e) <$> f
diff --git a/src/haskell-names/Language/Haskell/Names/SyntaxUtils.hs b/src/haskell-names/Language/Haskell/Names/SyntaxUtils.hs
--- a/src/haskell-names/Language/Haskell/Names/SyntaxUtils.hs
+++ b/src/haskell-names/Language/Haskell/Names/SyntaxUtils.hs
@@ -21,7 +21,7 @@
 import           Data.Foldable
 import           Data.Maybe
 import qualified Data.Set                        as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 
 dropAnn :: (Functor a) => a l -> a ()
 dropAnn = fmap (const ())
diff --git a/src/haskell-names/Language/Haskell/Names/Types.hs b/src/haskell-names/Language/Haskell/Names/Types.hs
--- a/src/haskell-names/Language/Haskell/Names/Types.hs
+++ b/src/haskell-names/Language/Haskell/Names/Types.hs
@@ -34,7 +34,7 @@
 import           Data.Foldable                            as F
 import           Data.Lens.Light
 import qualified Data.Set                                 as Set
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 import           Text.Printf
 
 type ExtensionSet = Set.Set KnownExtension
diff --git a/src/tests/Test/Compile.hs b/src/tests/Test/Compile.hs
--- a/src/tests/Test/Compile.hs
+++ b/src/tests/Test/Compile.hs
@@ -11,7 +11,7 @@
 import           Test.Util                       (isRight)
 #endif
 
-import           Language.Haskell.Exts.Annotated
+import           Language.Haskell.Exts
 import           Test.Tasty
 import           Test.Tasty.HUnit
 import           Test.Tasty.TH
diff --git a/src/tests/Test/Desugar.hs b/src/tests/Test/Desugar.hs
--- a/src/tests/Test/Desugar.hs
+++ b/src/tests/Test/Desugar.hs
@@ -10,13 +10,13 @@
 import           Fay.Compiler.Prelude
 
 import           Fay.Compiler.Desugar
-import           Fay.Compiler.Parse              (parseFay)
-import           Fay.Types.CompileError          (CompileError (..))
+import           Fay.Compiler.Parse     (parseFay)
+import           Fay.Types.CompileError (CompileError (..))
 
-import           Language.Haskell.Exts.Annotated hiding (alt, binds, loc, name)
+import           Language.Haskell.Exts  hiding (alt, binds, loc, name)
 import           Test.Tasty
 import           Test.Tasty.HUnit
-import           Text.Groom
+-- import           Text.Groom
 
 tests :: TestTree
 tests = testGroup "desugar" $ map (\(T k a b) -> testCase k $ doDesugar k a b) testDeclarations
@@ -147,7 +147,7 @@
   when (unAnn desugaredExpected /= unAnn originalExpected ) $ putStrLn "desugaredExpected /= undesugared"
 
 g :: Show a => a -> IO ()
-g = putStrLn . groom
+g = putStrLn . show -- groom
 
 unAnn :: Functor f => f a -> f ()
 unAnn = void
