diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,14 +1,17 @@
-0.8.0.1
+0.8.1:
+- Compatible with GHC 8.6, haskell-src-exts 1.22
+
+0.8.0.1:
 - Bump base and template-haskell library to versions shipped with GHC 7.6.
 
-0.8
+0.8:
 - Compatibility with GHC 8.2.
 - Remove deprecated modules.
 
-0.7.0.1
+0.7.0.1:
 - Fixed a bug that caused deriving clauses to be ignored on TH 2.11.
 
-0.7.0
+0.7.0:
 - Compatibility with haskell-src-exts 1.18.
 - Support dropped for GHC < 7.6 and haskell-src-exts < 1.17.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -11,3 +11,5 @@
 I don't really view this as "my" package so if you want write access to
 the github repository, or you think you could do a better job as
 maintainer, just ask.
+
+The above was written by Ben Millwood, but I (Dan Burton) share the same sentiment.
diff --git a/examples/BF.hs b/examples/BF.hs
--- a/examples/BF.hs
+++ b/examples/BF.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BangPatterns, TemplateHaskell #-}
 
-module Language.Haskell.Meta.QQ.BF (
-   bf,bf2,bfHelloWorld
+module BF (
+   bf,bf2,bfHelloWorld,eval_,parse
 ) where
 
 import Language.Haskell.Meta (parsePat)
@@ -174,9 +174,3 @@
         go !n acc (c  :cs) = (n+1, [Error ("go error: char "++show n
                                     ++" illegal character: "++show c)], [])
 -}
-
-
-
-
-
-
diff --git a/examples/Hs.hs b/examples/Hs.hs
--- a/examples/Hs.hs
+++ b/examples/Hs.hs
@@ -2,7 +2,7 @@
 
 -- | Eat your face!
 
-module Language.Haskell.Meta.QQ.Hs (hs, pat) where
+module Hs (hs, pat) where
 
 import Language.Haskell.Meta (parseExp, parsePat)
 import Language.Haskell.Meta.Utils (pretty)
diff --git a/examples/HsHere.hs b/examples/HsHere.hs
--- a/examples/HsHere.hs
+++ b/examples/HsHere.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveDataTypeable, PatternGuards, TemplateHaskell #-}
 
-module Language.Haskell.Meta.QQ.HsHere (here) where
+module HsHere (here) where
 
 import Language.Haskell.Meta (parseExp, parsePat)
 import Language.Haskell.TH.Lib
@@ -20,7 +20,7 @@
 
 -- | Example:
 --
--- > a x = [$here| random "text" $(x + 1)
+-- > a x = [here| random "text" $(x + 1)
 -- >  something else|]
 --
 -- Is like:
@@ -28,7 +28,9 @@
 -- > a x = " random \"text\" "++ show (x + 1) ++"\n  something else"
 here :: QuasiQuoter
 here = QuasiQuoter
-        {quoteExp = hereExpQ
+        {quoteType = fail "The here quoter is only for expressions and patterns"
+        ,quoteDec = fail "The here quoter is only for expressions and patterns"
+        ,quoteExp = hereExpQ
         ,quotePat = herePatQ}
 
 instance Lift Here
@@ -111,4 +113,3 @@
 cparenP  = char ')'
 obrackP  = char '['
 cbrackP  = char ']'
-
diff --git a/examples/SKI.hs b/examples/SKI.hs
--- a/examples/SKI.hs
+++ b/examples/SKI.hs
@@ -1,13 +1,13 @@
 {-# LANGUAGE DeriveDataTypeable, PatternGuards, TemplateHaskell #-}
 
-module Language.Haskell.Meta.QQ.SKI (SKI(..),ski) where
+module SKI (SKI(..),ski,parse) where
 
 import Language.Haskell.Meta (parseExp, parsePat)
-import Language.Haskell.TH.Lib
+import Language.Haskell.TH.Lib hiding (parensP)
 import Language.Haskell.TH.Ppr
 import Language.Haskell.TH.Quote
 import Language.Haskell.TH.Syntax
-import Language.Haskell.Meta.Utils (cleanNames, ppDoc, unQ)
+import Language.Haskell.Meta.Utils (cleanNames, ppDoc, unsafeRunQ)
 import Text.ParserCombinators.ReadP
 import Data.Typeable(Typeable)
 import Data.Generics(Data)
@@ -26,13 +26,13 @@
 eval (I :$ x)               = eval x
 eval ((K :$ x) :$ y)        = eval x
 eval (((S :$ x) :$ y :$ z)) = eval (eval (x :$ z) :$ eval (y :$ z))
-eval (E e :$ E e')          = E (unQ[|$(return e) $(return e')|])
+eval (E e :$ E e')          = E (unsafeRunQ[|$(return e) $(return e')|])
 eval (x :$ y)               = eval0 ((eval x) :$ (eval y))
 eval  x                     = x
 eval0 (I :$ x)               = eval x
 eval0 ((K :$ x) :$ y)        = eval x
 eval0 (((S :$ x) :$ y :$ z)) = eval (eval (x :$ z) :$ eval (y :$ z))
-eval0 (E e :$ E e')          = E (unQ[|$(return e) $(return e')|])
+eval0 (E e :$ E e')          = E (unsafeRunQ[|$(return e) $(return e')|])
 eval0  x                     = x
 
 ski :: QuasiQuoter
@@ -150,6 +150,3 @@
        c = s $ (b $ b $ s) $ k $ k
        b = s $ (k $ s) $ k
 -}
-
-
-
diff --git a/haskell-src-meta.cabal b/haskell-src-meta.cabal
--- a/haskell-src-meta.cabal
+++ b/haskell-src-meta.cabal
@@ -1,5 +1,5 @@
 name:               haskell-src-meta
-version:            0.8.0.3
+version:            0.8.1
 cabal-version:      >= 1.8
 build-type:         Simple
 license:            BSD3
@@ -7,21 +7,21 @@
 category:           Language, Template Haskell
 author:             Matt Morrow
 copyright:          (c) Matt Morrow
-maintainer:         Ben Millwood <haskell@benmachine.co.uk>
-bug-reports:        https://github.com/bmillwood/haskell-src-meta/issues
-tested-with:        GHC == 7.6.3, GHC == 7.8.3, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.1
+maintainer:         danburton.email@gmail.com
+bug-reports:        https://github.com/DanBurton/haskell-src-meta/issues
+tested-with:        GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.3
 synopsis:           Parse source to template-haskell abstract syntax.
 description:        The translation from haskell-src-exts abstract syntax
                     to template-haskell abstract syntax isn't 100% complete yet.
 
-extra-source-files: ChangeLog README.md examples/*.hs
+extra-source-files: ChangeLog README.md
 
 library
-  build-depends:   base >= 4.6 && < 4.12,
-                   haskell-src-exts >= 1.18 && < 1.21,
+  build-depends:   base >= 4.6 && < 5,
+                   haskell-src-exts >= 1.18 && < 1.22,
                    pretty >= 1.0 && < 1.2,
                    syb >= 0.1 && < 0.8,
-                   template-haskell >= 2.8 && < 2.14,
+                   template-haskell >= 2.8 && < 2.15,
                    th-orphans >= 0.9.1 && < 0.14
 
   if impl(ghc < 7.8)
@@ -40,11 +40,11 @@
 
   build-depends:
     HUnit                >= 1.2  && < 1.7,
-    base                 >= 4.5  && < 4.12,
-    haskell-src-exts     >= 1.17 && < 1.21,
+    base                 >= 4.5  && < 5,
+    haskell-src-exts     >= 1.17 && < 1.22,
     haskell-src-meta,
     pretty               >= 1.0  && < 1.2,
-    template-haskell     >= 2.7  && < 2.14,
+    template-haskell     >= 2.7  && < 2.15,
     test-framework       >= 0.8  && < 0.9,
     test-framework-hunit >= 0.3  && < 0.4
 
@@ -57,6 +57,25 @@
     base,
     haskell-src-meta
 
+test-suite examples
+  type:             exitcode-stdio-1.0
+  hs-source-dirs:   examples, tests
+  main-is:          TestExamples.hs
+
+  build-depends:
+    base,
+    containers,
+    haskell-src-meta,
+    syb,
+    template-haskell,
+    pretty
+
+  other-modules:
+    BF,
+    Hs,
+    HsHere,
+    SKI
+
 source-repository head
   type:     git
-  location: git://github.com/bmillwood/haskell-src-meta.git
+  location: git://github.com/danburton/haskell-src-meta.git
diff --git a/src/Language/Haskell/Meta/Parse.hs b/src/Language/Haskell/Meta/Parse.hs
--- a/src/Language/Haskell/Meta/Parse.hs
+++ b/src/Language/Haskell/Meta/Parse.hs
@@ -68,14 +68,10 @@
 {-# DEPRECATED myDefaultParseMode, myDefaultExtensions
   "The provided ParseModes aren't very meaningful, use your own instead" #-}
 myDefaultParseMode :: ParseMode
-myDefaultParseMode = ParseMode
+myDefaultParseMode = defaultParseMode
   {parseFilename = []
   ,baseLanguage = Haskell2010
   ,extensions = map EnableExtension myDefaultExtensions
-  ,ignoreLinePragmas = False
-  ,ignoreLanguagePragmas = False
-  ,fixities = Nothing
-  ,ignoreFunctionArity = False
   }
 
 myDefaultExtensions :: [KnownExtension]
diff --git a/src/Language/Haskell/Meta/Syntax/Translate.hs b/src/Language/Haskell/Meta/Syntax/Translate.hs
--- a/src/Language/Haskell/Meta/Syntax/Translate.hs
+++ b/src/Language/Haskell/Meta/Syntax/Translate.hs
@@ -314,11 +314,13 @@
   toName (PlainTV n) = n
   toName (KindedTV n _) = n
 
+#if !MIN_VERSION_haskell_src_exts(1,21,0)
 instance ToType (Hs.Kind l) where
   toType (Hs.KindStar _) = StarT
   toType (Hs.KindFn _ k1 k2) = toType k1 .->. toType k2
   toType (Hs.KindParen _ kp) = toType kp
   toType (Hs.KindVar _ n) = VarT (toName n)
+#endif
 
 toKind :: Hs.Kind l -> Kind
 toKind = toType
@@ -714,7 +716,7 @@
 
 instance ToDecs (Hs.Decl l) where
   toDecs a@(Hs.TypeSig _ ns t)
-    = let xs = fmap (flip SigD (fixForall $ toType t) . toName) ns
+    = let xs = fmap (flip SigD (toType t) . toName) ns
        in xs
 
   toDecs (Hs.InfixDecl l assoc Nothing ops) =
@@ -728,17 +730,6 @@
       Hs.AssocRight _ -> InfixR
 
   toDecs a = [toDec a]
-
-collectVars e = case e of
-  VarT n -> [PlainTV n]
-  AppT t1 t2 -> nub $ collectVars t1 ++ collectVars t2
-  ForallT ns _ t -> collectVars t \\ ns
-  _          -> []
-
-fixForall t = case vs of
-  [] -> t
-  _  -> ForallT vs [] t
-  where vs = collectVars t
 
 instance ToDecs a => ToDecs [a] where
   toDecs a = concatMap toDecs a
diff --git a/tests/Splices.hs b/tests/Splices.hs
--- a/tests/Splices.hs
+++ b/tests/Splices.hs
@@ -1,26 +1,50 @@
-{-#LANGUAGE TemplateHaskell#-}
+{-# LANGUAGE CPP, TemplateHaskell #-}
 -- | Tests stuff mostly by just compiling correctly
 import Language.Haskell.Meta
 
-
------ Testing names:
+----- Testing names -----
 
 -- Test that the unit constructor works
-$(either error return $ parseDecs 
+$(either error return $ parseDecs
       "unit :: IO ()\nunit = return ()")
 
--- Testing that the [] constructor works in types, 
-$(either error return $ parseDecs 
+-- Testing that the [] constructor works in types,
+#if MIN_VERSION_base(4,9,0)
+$(either error return $ parseDecs
       "nilp :: [a] -> ([] a)\nnilp [] = []")
+#else
+-- CPP Note: Apparently ghc < 7 doesn't parse this correctly w/o the forall.
+-- https://github.com/DanBurton/haskell-src-meta/issues/2
+$(either error return $ parseDecs
+      "nilp :: forall a. [a] -> ([] a)\nnilp [] = []")
+#endif
 
-$(either error return $ parseDecs 
+$(either error return $ parseDecs
       "pair :: (,) Int Int\npair = (,) 1 2")
 
 
+----- Testing classes and instances -----
+#if MIN_VERSION_base(4,9,0)
+$(either error return $ parseDecs $ unlines
+   ["class MyClass a where mymethod :: a -> b -> (a,b)"
+   ,"instance MyClass Bool where mymethod a b = (a,b)"
+   ])
+#else
+-- CPP Note: Apparently ghc < 7 doesn't parse this correctly w/o the forall.
+-- https://github.com/DanBurton/haskell-src-meta/issues/2
+$(either error return $ parseDecs $ unlines
+   ["class MyClass a where mymethod :: forall b. a -> b -> (a,b)"
+   ,"instance MyClass Bool where mymethod a b = (a,b)"
+   ])
+#endif
 
+
+
 -- Just to check that it works as intended
 main = do
+  -9 <- return $(either error return $ parseExp "-3^2") :: IO Int
   () <- unit
   [] <- return (nilp [])
   (1,2) <- return pair
+  (True,1) <- return $ mymethod True 1
   return ()
diff --git a/tests/TestExamples.hs b/tests/TestExamples.hs
new file mode 100644
--- /dev/null
+++ b/tests/TestExamples.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
+
+import Control.Monad (when)
+
+import qualified BF
+import qualified Hs
+import qualified HsHere
+import qualified SKI
+
+import SKI (SKI(S, K, I, (:$)))
+
+-- Very dumb test framework
+shouldBe :: (Show a, Eq a) => a -> a -> IO ()
+actual `shouldBe` expected = case actual == expected of
+  True -> return ()
+  False -> do
+    putStr "Expected: "
+    print expected
+    putStr "Actual: "
+    print actual
+    fail "Expectation failure"
+
+
+a :: Int -> String
+a x = [HsHere.here| random "text" $(x + 1)
+  something else|]
+
+hereTest :: IO ()
+hereTest = do
+ a 3 `shouldBe` (" random \"text\" "++ show (3 + 1) ++"\n  something else")
+
+-- TODO: better test exercising the bf quasiquoter
+
+bfTest :: IO ()
+bfTest = do
+  BF.eval_ (BF.parse BF.bfHelloWorld) "" `shouldBe` "Hello World!\n"
+
+hsTest :: IO ()
+hsTest = do
+  (\ [Hs.hs|a@(x,_)|] -> [Hs.hs|(a,x)|]) (42,88) `shouldBe` ((42,88),42)
+
+-- TODO: better test exercising the ski quasiquoter
+
+skiTest :: IO ()
+skiTest = do
+  SKI.parse "S(SS)IK(SK)" `shouldBe` ([(((S :$ (S :$ S)) :$ I) :$ K) :$ (S :$ K)],"")
+
+main :: IO ()
+main = do
+  putStrLn ""
+  hereTest
+  bfTest
+  hsTest
+  skiTest
