diff --git a/examples/Parser.hs b/examples/Parser.hs
--- a/examples/Parser.hs
+++ b/examples/Parser.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE 
-    FlexibleInstances 
+{-# LANGUAGE
+    FlexibleInstances
   , TypeOperators
   , GADTs
   , TypeSynonymInstances
@@ -18,7 +18,7 @@
 
 type Parser c = HFree Alternative (ParserF c)
 
-symbol :: c -> Parser (ParserF c) c
+symbol :: c -> Parser c c
 symbol = liftFree . Symbol
 
 
diff --git a/free-functors.cabal b/free-functors.cabal
--- a/free-functors.cabal
+++ b/free-functors.cabal
@@ -1,5 +1,5 @@
 name:                free-functors
-version:             0.6.3.3
+version:             0.6.4
 synopsis:            Provides free functors that are adjoint to functors that forget class constraints.
 description:         A free functor is a left adjoint to a forgetful functor. It used to be the case
                      that the only category that was easy to work with in Haskell was Hask itself, so
@@ -46,8 +46,8 @@
     transformers >= 0.2.0.0 && < 0.5,
     comonad >= 4.0 && < 4.3,
     void >= 0.4 && < 0.8,
-    algebraic-classes >= 0.5 && < 0.6,
-    template-haskell >= 2.8.0.0 && < 2.9.1
+    algebraic-classes >= 0.5 && < 0.7,
+    template-haskell >= 2.8.0.0 && < 2.10.1
 
 source-repository head
   type:     git
diff --git a/src/Data/Functor/Free.hs b/src/Data/Functor/Free.hs
--- a/src/Data/Functor/Free.hs
+++ b/src/Data/Functor/Free.hs
@@ -2,7 +2,7 @@
     ConstraintKinds
   , GADTs
   , RankNTypes
-  , TypeOperators  
+  , TypeOperators
   , FlexibleInstances
   , MultiParamTypeClasses
   , UndecidableInstances
@@ -38,7 +38,7 @@
   , unfold
   , convert
   , convertClosed
-  
+
   -- * Coproducts
   , Coproduct
   , coproduct
@@ -46,9 +46,9 @@
   , inR
   , InitialObject
   , initial
-  
+
   ) where
-  
+
 import Control.Applicative
 import Control.Comonad
 import Data.Function
@@ -66,9 +66,9 @@
 import Data.Algebra.TH
 import Language.Haskell.TH.Syntax
 
--- | The free functor for class @c@. 
+-- | The free functor for class @c@.
 --
---   @Free c a@ is basically an expression tree with operations from class @c@ 
+--   @Free c a@ is basically an expression tree with operations from class @c@
 --   and variables/placeholders of type @a@, created with `unit`.
 --   Monadic bind allows you to replace each of these variables with another sub-expression.
 newtype Free c a = Free { runFree :: forall b. c b => (a -> b) -> b }
@@ -150,7 +150,7 @@
 
 
 
--- | Products of @Monoid@s are @Monoid@s themselves. But coproducts of @Monoid@s are not. 
+-- | Products of @Monoid@s are @Monoid@s themselves. But coproducts of @Monoid@s are not.
 -- However, the free @Monoid@ applied to the coproduct /is/ a @Monoid@, and it is the coproduct in the category of @Monoid@s.
 -- This is also called the free product, and generalizes to any algebraic class.
 type Coproduct c m n = Free c (Either m n)
@@ -172,8 +172,8 @@
 
 -- | Derive the instances of @`Free` c a@ for the class @c@, `Show`, `Foldable` and `Traversable`.
 --
--- For example: 
--- 
+-- For example:
+--
 -- @deriveInstances ''Num@
 deriveInstances :: Name -> Q [Dec]
 deriveInstances nm = concat <$> sequenceA
@@ -183,11 +183,11 @@
   , deriveInstanceWith_skipSignature showHelperHeader $ return []
   ]
   where
-    freeHeader = return $ ForallT [PlainTV a] [] 
+    freeHeader = return $ ForallT [PlainTV a] []
       (AppT c (AppT (AppT free c) (VarT a)))
-    liftAFreeHeader = return $ ForallT [PlainTV f,PlainTV a] [ClassP ''Applicative [VarT f]] 
+    liftAFreeHeader = return $ ForallT [PlainTV f,PlainTV a] [AppT (ConT ''Applicative) (VarT f)] 
       (AppT c (AppT (AppT (AppT liftAFree c) (VarT f)) (VarT a)))
-    showHelperHeader = return $ ForallT [PlainTV a] [] 
+    showHelperHeader = return $ ForallT [PlainTV a] []
       (AppT c (AppT (AppT showHelper sig) (VarT a)))
     free = ConT ''Free
     liftAFree = ConT ''LiftAFree
@@ -219,5 +219,5 @@
   showsPrec p (ShowUnit a) = showParen (p > 10) $ showString "unit " . showsPrec 11 a
   showsPrec p (ShowRec f) = showsPrec p f
 
-instance (Show a, Show (Signature c (ShowHelper (Signature c) a)), c (ShowHelper (Signature c) a)) => Show (Free c a) where 
+instance (Show a, Show (Signature c (ShowHelper (Signature c) a)), c (ShowHelper (Signature c) a)) => Show (Free c a) where
   show = show . rightAdjunct (ShowUnit :: a -> ShowHelper (Signature c) a)
