diff --git a/Language/Haskell/Exts/QQ.hs b/Language/Haskell/Exts/QQ.hs
--- a/Language/Haskell/Exts/QQ.hs
+++ b/Language/Haskell/Exts/QQ.hs
@@ -13,7 +13,7 @@
 --
 -- In a pattern context, antiquotations use the same syntax.
 
-module Language.Haskell.Exts.QQ (hs, dec) where
+module Language.Haskell.Exts.QQ (hs, dec, hsWithMode, decWithMode) where
 
 import qualified Language.Haskell.Exts as Hs
 import qualified Language.Haskell.Exts.Translate as Hs
@@ -24,27 +24,39 @@
 import Data.List (intercalate)
 
 
--- | A quasiquoter for expressions.
-hs = QuasiQuoter { quoteExp = Hs.parseExpWithMode
-                              Hs.defaultParseMode{Hs.extensions = Hs.knownExtensions}
-                                    `project` antiquoteExp
-                 , quotePat = Hs.parsePat `project` antiquotePat
+-- | A quasiquoter for expressions. All Haskell extensions known by
+-- haskell-src-exts are activated by default.
+hs :: QuasiQuoter
+hs = hsWithMode Hs.defaultParseMode{Hs.extensions = Hs.knownExtensions}
+
+-- | A quasiquoter for top-level declarations.
+dec :: QuasiQuoter
+dec = decWithMode Hs.defaultParseMode{Hs.extensions = Hs.knownExtensions}
+
+-- | Rather than importing the above quasiquoters, one can create custom
+-- quasiquoters with a customized 'ParseMode' using this function.
+--
+-- > hs = hsWithMode mode
+-- > dec = decWithMode mode
+hsWithMode :: Hs.ParseMode -> QuasiQuoter
+hsWithMode mode =
+  QuasiQuoter { quoteExp = Hs.parseExpWithMode mode `project` antiquoteExp
+              , quotePat = Hs.parsePat `project` antiquotePat
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 613
-                 , quoteType = error "Unimplemented."
-                 , quoteDec = error "Unimplemented."
+              , quoteType = error "Unimplemented."
+              , quoteDec = error "Unimplemented."
 #endif
-                 }
+              }
 
--- | A quasiquoter for top-level declarations.
-dec = QuasiQuoter { quoteExp = Hs.parseDeclWithMode
-                               Hs.defaultParseMode{Hs.extensions = Hs.knownExtensions}
-                                     `project` antiquoteExp
-                  , quotePat = Hs.parsePat `project` antiquotePat
+decWithMode :: Hs.ParseMode -> QuasiQuoter
+decWithMode mode =
+  QuasiQuoter { quoteExp = Hs.parseDeclWithMode mode `project` antiquoteExp
+              , quotePat = Hs.parsePat `project` antiquotePat
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 613
-                  , quoteType = error "Unimplemented."
-                  , quoteDec = error "Unimplemented."
+              , quoteType = error "Unimplemented."
+              , quoteDec = error "Unimplemented."
 #endif
-                  }
+              }
 
 project f k s = case f s of
                   Hs.ParseOk x -> k x
diff --git a/haskell-src-exts-qq.cabal b/haskell-src-exts-qq.cabal
--- a/haskell-src-exts-qq.cabal
+++ b/haskell-src-exts-qq.cabal
@@ -1,5 +1,5 @@
 Name:           haskell-src-exts-qq
-Version:        0.2.3
+Version:        0.3.0
 Author:         Mathieu Boespflug
 Maintainer:     Mathieu Boespflug <mboes@tweag.net>
 Synopsis:       A quasiquoter for haskell-src-exts.
@@ -10,7 +10,7 @@
     * Antiquotations, denoted by stealing the splice syntax of
     Template Haskell, for example @[$hs| $x ++ $(Hs.strE "bar") |]@.
     Splices may not nested.
-
+    .
     * Antiquoting names in patterns. Names that are antiquoted appear
     surrounded by double parentheses. For instance:
     .
@@ -29,8 +29,8 @@
 library
   Build-Depends:  base >= 4 && < 5, syb, template-haskell,
                   -- xxx awaiting cabal fix.
-                  haskell-src-exts == 1.8.2
+                  haskell-src-exts == 1.9.0
   Extensions:      PatternGuards, TypeSynonymInstances, TemplateHaskell, CPP
   Exposed-Modules: Language.Haskell.Exts.QQ
                    Language.Haskell.Exts.Translate
-  cpp-options:    -DVERSION_haskell_src_exts="1.8.2"
+  cpp-options:    -DVERSION_haskell_src_exts="1.9.0"
