diff --git a/src/Language/Syntactic/Decoration.hs b/src/Language/Syntactic/Decoration.hs
--- a/src/Language/Syntactic/Decoration.hs
+++ b/src/Language/Syntactic/Decoration.hs
@@ -51,7 +51,7 @@
 
 instance (NFData1 sym, NFData1 info) => NFData1 (sym :&: info)
   where
-    rnf1 (s :&: i) = rnf1 s `seq` rnf1 i `seq` ()
+    liftRnf r (s :&: i) = liftRnf r s `seq` liftRnf (`seq` ()) i
 
 instance {-# OVERLAPPING #-} Project sub sup => Project sub (sup :&: info)
   where
diff --git a/src/Language/Syntactic/Functional.hs b/src/Language/Syntactic/Functional.hs
--- a/src/Language/Syntactic/Functional.hs
+++ b/src/Language/Syntactic/Functional.hs
@@ -74,10 +74,7 @@
 import Control.Monad.State
 import Data.Dynamic
 import Data.List (genericIndex)
-#if MIN_VERSION_GLASGOW_HASKELL(7,10,0,0)
-#else
-import Data.Proxy  -- Needed by GHC < 7.8
-#endif
+import Data.Proxy
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.Set (Set)
@@ -90,9 +87,9 @@
 
 
 
-----------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 -- * Syntactic constructs
-----------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 
 -- | Literal
 data Literal sig
@@ -158,8 +155,8 @@
 
 instance NFData1 Binding
   where
-    rnf1 (Var v) = rnf v
-    rnf1 (Lam v) = rnf v
+    liftRnf _ (Var v) = rnf v
+    liftRnf _ (Lam v) = rnf v
 
 -- | 'equal' does strict identifier comparison; i.e. no alpha equivalence.
 --
@@ -258,8 +255,8 @@
 
 instance NFData1 BindingT
   where
-    rnf1 (VarT v) = rnf v
-    rnf1 (LamT v) = rnf v
+    liftRnf _ (VarT v) = rnf v
+    liftRnf _ (LamT v) = rnf v
 
 -- | 'equal' does strict identifier comparison; i.e. no alpha equivalence.
 --
@@ -588,9 +585,9 @@
 
 
 
-----------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 -- * Alpha-equivalence
-----------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 
 -- | Environment used by 'alphaEq''
 type AlphaEnv = [(Name,Name)]
@@ -635,9 +632,9 @@
 
 
 
-----------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 -- * Evaluation
-----------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
 
 -- | Semantic function type of the given symbol signature
 type family   Denotation sig
diff --git a/src/Language/Syntactic/Functional/WellScoped.hs b/src/Language/Syntactic/Functional/WellScoped.hs
--- a/src/Language/Syntactic/Functional/WellScoped.hs
+++ b/src/Language/Syntactic/Functional/WellScoped.hs
@@ -68,8 +68,8 @@
 
 instance NFData1 BindingWS
   where
-    rnf1 (VarWS Proxy) = ()
-    rnf1 LamWS         = ()
+    liftRnf _ (VarWS Proxy) = ()
+    liftRnf _ LamWS         = ()
 
 instance Eval BindingWS
   where
diff --git a/src/Language/Syntactic/Syntax.hs b/src/Language/Syntactic/Syntax.hs
--- a/src/Language/Syntactic/Syntax.hs
+++ b/src/Language/Syntactic/Syntax.hs
@@ -142,7 +142,7 @@
 
 instance NFData1 sym => NFData (AST sym sig)
   where
-    rnf (Sym s)  = rnf1 s
+    rnf (Sym s)  = liftRnf (`seq` ()) s
     rnf (s :$ a) = rnf s `seq` rnf a
 
 -- | Count the number of symbols in an 'AST'
@@ -215,8 +215,8 @@
 
 instance (NFData1 sym1, NFData1 sym2) => NFData1 (sym1 :+: sym2)
   where
-    rnf1 (InjL s) = rnf1 s
-    rnf1 (InjR s) = rnf1 s
+    liftRnf r (InjL s) = liftRnf r s
+    liftRnf r (InjR s) = liftRnf r s
 
 -- | Symbol projection
 --
@@ -397,13 +397,6 @@
 --------------------------------------------------------------------------------
 -- * Misc.
 --------------------------------------------------------------------------------
-
--- | Higher-kinded version of 'NFData'
-class NFData1 c
-  where
-    -- | Force a symbol to normal form
-    rnf1 :: c a -> ()
-    rnf1 s = s `seq` ()
 
 -- | Constrain a symbol to a specific type
 symType :: Proxy sym -> sym sig -> sym sig
diff --git a/syntactic.cabal b/syntactic.cabal
--- a/syntactic.cabal
+++ b/syntactic.cabal
@@ -1,5 +1,5 @@
 Name:           syntactic
-Version:        3.6.3
+Version:        3.7
 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
@@ -81,7 +81,7 @@
     constraints,
     containers,
     data-hash,
-    deepseq,
+    deepseq >= 1.4.3.0,
     mtl >= 2 && < 3,
     syb,
     tree-view >= 0.5
