diff --git a/src/Language/Syntactic/Functional/Tuple/TH.hs b/src/Language/Syntactic/Functional/Tuple/TH.hs
--- a/src/Language/Syntactic/Functional/Tuple/TH.hs
+++ b/src/Language/Syntactic/Functional/Tuple/TH.hs
@@ -128,7 +128,7 @@
                       , AppT (ConT ''Full) (AppT (ConT (mkName ("Sel" ++ show s))) (VarT (mkName "tup")))
                       ]
                   )
-              , classPred (mkName ("Select" ++ show s)) [VarT (mkName "tup")]
+              , classPred (mkName ("Select" ++ show s)) ConT [VarT (mkName "tup")]
               ]
               (NormalC (mkName (selName ++ show s)) [])
             | s <- [1..n]
@@ -185,9 +185,9 @@
   where
     deriveSyntacticForTuple w = InstanceD
         ( concat
-            [ map (classPred ''Syntactic . return) varsT
+            [ map (classPred ''Syntactic ConT . return) varsT
             , concatMap internalPred $ map (AppT (ConT ''Internal)) varsT
-            , [classPred ''(:<:) [ConT (mkName "Tuple"), VarT (mkName "sym")]]
+            , [classPred ''(:<:) ConT [ConT (mkName "Tuple"), VarT (mkName "sym")]]
             , [eqPred domainA (mkDomain (VarT (mkName "sym")))]
             , [eqPred domainA (AppT (ConT ''Domain) b)
                 | b <- tail varsT
diff --git a/src/Language/Syntactic/Sugar/TupleTyped.hs b/src/Language/Syntactic/Sugar/TupleTyped.hs
--- a/src/Language/Syntactic/Sugar/TupleTyped.hs
+++ b/src/Language/Syntactic/Sugar/TupleTyped.hs
@@ -21,7 +21,7 @@
 
 
 deriveSyntacticForTuples
-    (return . classPred ''Typeable . return)
+    (return . classPred ''Typeable ConT . return)
     (AppT (ConT ''Typed))
     (\s -> AppE (ConE 'Typed) (AppE (VarE 'inj) s))
 #if __GLASGOW_HASKELL__ < 708
diff --git a/src/Language/Syntactic/TH.hs b/src/Language/Syntactic/TH.hs
--- a/src/Language/Syntactic/TH.hs
+++ b/src/Language/Syntactic/TH.hs
@@ -187,11 +187,15 @@
 #endif
 
 -- | Portable method for constructing a 'Pred' of the form @SomeClass t1 t2 ...@
-classPred :: Name -> [Type] -> Pred
+classPred
+    :: Name            -- ^ Class name
+    -> (Name -> Type)  -- ^ How to make a type for the class (typically 'ConT' or VarT)
+    -> [Type]          -- ^ Class arguments
+    -> Pred
 #if MIN_VERSION_template_haskell(2,10,0)
-classPred cl = foldl AppT (ConT cl)
+classPred cl con = foldl AppT (con cl)
 #else
-classPred = ClassP
+classPred cl con = ClassP cl
 #endif
 
 -- | Portable method for constructing a type synonym instances
diff --git a/syntactic.cabal b/syntactic.cabal
--- a/syntactic.cabal
+++ b/syntactic.cabal
@@ -1,5 +1,5 @@
 Name:           syntactic
-Version:        3.3
+Version:        3.4
 Synopsis:       Generic representation and manipulation of abstract syntax
 Description:    The library provides a generic representation of type-indexed abstract syntax trees
                 (or indexed data types in general). It also permits the definition of open syntax
