diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+0.8.2:
+- Added ToExp implementation for type application
+- Added parseDecsWithMode and parseHsDeclsWithMode
+
 0.8.1:
 - Compatible with GHC 8.6, haskell-src-exts 1.22
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-The `haskell-src-meta` Package  [![Hackage](https://img.shields.io/hackage/v/haskell-src-meta.svg)](https://hackage.haskell.org/package/haskell-src-meta) [![Build Status](https://travis-ci.org/mainland/haskell-src-meta.svg)](https://travis-ci.org/mainland/haskell-src-meta)
+The `haskell-src-meta` Package  [![Hackage](https://img.shields.io/hackage/v/haskell-src-meta.svg)](https://hackage.haskell.org/package/haskell-src-meta) [![Build Status](https://travis-ci.org/DanBurton/haskell-src-meta.svg)](https://travis-ci.org/DanBurton/haskell-src-meta)
 ==================
 
 `haskell-src-meta` is a package originally by Matt Morrow for converting a
@@ -12,4 +12,5 @@
 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.
+The above was written by Ben Millwood,
+but I (Dan Burton) share the same sentiment.
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.1
+version:            0.8.2
 cabal-version:      >= 1.8
 build-type:         Simple
 license:            BSD3
@@ -55,7 +55,9 @@
 
   build-depends:
     base,
-    haskell-src-meta
+    haskell-src-exts,
+    haskell-src-meta,
+    template-haskell
 
 test-suite examples
   type:             exitcode-stdio-1.0
@@ -66,9 +68,9 @@
     base,
     containers,
     haskell-src-meta,
+    pretty,
     syb,
-    template-haskell,
-    pretty
+    template-haskell
 
   other-modules:
     BF,
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
@@ -13,11 +13,13 @@
   parseExp,
   parseType,
   parseDecs,
+  parseDecsWithMode,
   myDefaultParseMode,
   myDefaultExtensions,
   parseResultToEither,
   parseHsModule,
   parseHsDecls,
+  parseHsDeclsWithMode,
   parseHsType,
   parseHsExp,
   parseHsPat,
@@ -63,6 +65,11 @@
 parseDecs :: String -> Either String [Dec]
 parseDecs  = either Left (Right . toDecs) . parseHsDecls
 
+-- | @since 0.8.2
+parseDecsWithMode :: ParseMode -> String -> Either String [Dec]
+parseDecsWithMode parseMode = either Left (Right . toDecs)
+  . parseHsDeclsWithMode parseMode
+
 -----------------------------------------------------------------------------
 
 {-# DEPRECATED myDefaultParseMode, myDefaultExtensions
@@ -98,6 +105,11 @@
 parseHsDecls :: String -> Either String [Hs.Decl Hs.SrcSpanInfo]
 parseHsDecls = either Left (Right . moduleDecls)
   . parseResultToEither . parseModuleWithMode myDefaultParseMode
+
+-- | @since 0.8.2
+parseHsDeclsWithMode :: ParseMode -> String -> Either String [Hs.Decl Hs.SrcSpanInfo]
+parseHsDeclsWithMode parseMode = either Left (Right . moduleDecls)
+  . parseResultToEither . parseModuleWithMode parseMode
 
 
 parseHsType :: String -> Either String (Hs.Type Hs.SrcSpanInfo)
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
@@ -135,7 +135,7 @@
   toName (Hs.UnitCon _) = mkName "()"
   toName (Hs.ListCon _) = ''[] -- Parser only uses this in types
   toName (Hs.FunCon _)  = ''(->)
-  toName (Hs.TupleCon _ _ n) = 
+  toName (Hs.TupleCon _ _ n) =
      mkName $ concat ["(",replicate (n-1) ',',")"]
   toName (Hs.Cons _)    = '(:)
 
@@ -236,6 +236,11 @@
   toExp (Hs.Con _ n)                 = ConE (toName n)
   toExp (Hs.Lit _ l)                 = LitE (toLit l)
   toExp (Hs.InfixApp _ e o f)        = UInfixE (toExp e) (toExp o) (toExp f)
+#if MIN_VERSION_template_haskell(2,12,0)
+  toExp (Hs.App _ e (Hs.TypeApp _ t)) = AppTypeE (toExp e) (toType t)
+#else
+  toExp (Hs.App _ e aTypeApp@Hs.TypeApp{}) = noTHyet "toExp" "2.12.0" aTypeApp
+#endif
   toExp (Hs.App _ e f)               = AppE (toExp e) (toExp f)
   toExp (Hs.NegApp _ e)              = AppE (VarE 'negate) (toExp e)
   toExp (Hs.Lambda _ ps e)         = LamE (fmap toPat ps) (toExp e)
diff --git a/src/Language/Haskell/Meta/Utils.hs b/src/Language/Haskell/Meta/Utils.hs
--- a/src/Language/Haskell/Meta/Utils.hs
+++ b/src/Language/Haskell/Meta/Utils.hs
@@ -92,7 +92,7 @@
             (c:_) | isSym c -> concat ["(",nb,")"]
             _  -> nb
         isSym :: Char -> Bool
-        isSym = (`elem` "><.\\/!@#$%^&*-+?:|")
+        isSym = (`elem` ("><.\\/!@#$%^&*-+?:|" :: [Char]))
 
 
 -----------------------------------------------------------------------------
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -3,11 +3,9 @@
 module Main where
 
 import Language.Haskell.Meta.Parse
-#if MIN_VERSION_haskell_src_exts(1,18,0)
 import qualified Language.Haskell.Exts as Exts
-#else
-import qualified Language.Haskell.Exts.Annotated as Exts
-#endif
+import qualified Language.Haskell.Exts.Extension as Extension
+import qualified Language.Haskell.Exts.Parser as Parser
 import qualified Language.Haskell.TH as TH
 import Test.Framework
 import Test.Framework.Providers.HUnit
@@ -17,17 +15,34 @@
 main = defaultMain tests
 
 tests :: [Test]
-tests = [derivingClausesTest]
+tests = [ derivingClausesTest
+#if MIN_VERSION_template_haskell(2,12,0)
+        , typeAppTest
+#endif
+        ]
 
 derivingClausesTest :: Test
 derivingClausesTest = testCase "Deriving clauses preserved" $
     roundTripDecls "data Foo = Foo deriving (A, B, C)"
 
+typeAppMode :: Exts.ParseMode
+typeAppMode = Parser.defaultParseMode { Parser.extensions = [Extension.EnableExtension Extension.TypeApplications] }
+
+typeAppTest :: Test
+typeAppTest = testCase "Type app preserved" $
+  roundTripDeclsWithMode typeAppMode "tenStr = show @Int 10"
+
 roundTripDecls :: String -> Assertion
 roundTripDecls s = do
     declsExts  <- liftEither $ parseHsDecls s
     declsExts' <- liftEither $ parseDecs s >>= parseHsDecls . TH.pprint
     declsExts' @?= declsExts
+
+roundTripDeclsWithMode :: Exts.ParseMode -> String -> Assertion
+roundTripDeclsWithMode mode s = do
+  declsExts <- liftEither $ parseHsDeclsWithMode mode s
+  declsExts' <- liftEither $ parseDecsWithMode mode s >>= parseHsDeclsWithMode mode . TH.pprint
+  declsExts' @?= declsExts
 
 liftEither :: Monad m => Either String a -> m a
 liftEither = either fail return
diff --git a/tests/Splices.hs b/tests/Splices.hs
--- a/tests/Splices.hs
+++ b/tests/Splices.hs
@@ -1,50 +1,63 @@
 {-# LANGUAGE CPP, TemplateHaskell #-}
 -- | Tests stuff mostly by just compiling correctly
-import Language.Haskell.Meta
+import qualified Language.Haskell.Exts.Extension as Extension
+import qualified Language.Haskell.Exts.Parser as Parser
+import qualified Language.Haskell.Meta as Meta
 
 ----- Testing names -----
 
 -- Test that the unit constructor works
-$(either error return $ parseDecs
+$(either error return $ Meta.parseDecs
       "unit :: IO ()\nunit = return ()")
 
 -- Testing that the [] constructor works in types,
 #if MIN_VERSION_base(4,9,0)
-$(either error return $ parseDecs
+$(either error return $ Meta.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
+$(either error return $ Meta.parseDecs
       "nilp :: forall a. [a] -> ([] a)\nnilp [] = []")
 #endif
 
-$(either error return $ parseDecs
+$(either error return $ Meta.parseDecs
       "pair :: (,) Int Int\npair = (,) 1 2")
 
 
 ----- Testing classes and instances -----
 #if MIN_VERSION_base(4,9,0)
-$(either error return $ parseDecs $ unlines
+$(either error return $ Meta.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
+$(either error return $ Meta.parseDecs $ unlines
    ["class MyClass a where mymethod :: forall b. a -> b -> (a,b)"
    ,"instance MyClass Bool where mymethod a b = (a,b)"
    ])
 #endif
 
+#if MIN_VERSION_template_haskell(2,12,0)
+$(either error return $ Meta.parseDecsWithMode (Parser.defaultParseMode { Parser.extensions = [Extension.EnableExtension Extension.TypeApplications] }) $ unlines
+   ["tenStr :: String"
+   ,"tenStr = show @Int 10"])
+#else
+-- Type Application not supported by template-haskell < 2.12
+$(either error return $ Meta.parseDecs $ unlines
+   ["tenStr :: String"
+   ,"tenStr = show (10 :: Int)"])
+#endif
 
 
 -- Just to check that it works as intended
 main = do
-  -9 <- return $(either error return $ parseExp "-3^2") :: IO Int
+  -9 <- return $(either error return $ Meta.parseExp "-3^2") :: IO Int
   () <- unit
   [] <- return (nilp [])
   (1,2) <- return pair
   (True,1) <- return $ mymethod True 1
+  "10" <- return tenStr
   return ()
