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
@@ -69,6 +69,7 @@
 import Control.Applicative
 #endif
 import Control.DeepSeq (NFData (..))
+import Control.Monad (liftM2)
 import Control.Monad.Cont
 import Control.Monad.Reader
 import Control.Monad.State
@@ -489,7 +490,7 @@
 
 instance Monad (Remon dom m)
   where
-    return a = Remon $ return a
+    return = pure
     ma >>= f = Remon $ unRemon ma >>= \a -> unRemon (f a)
 
 -- | One-layer desugaring of monadic actions
diff --git a/src/Language/Syntactic/Functional/Sharing.hs b/src/Language/Syntactic/Functional/Sharing.hs
--- a/src/Language/Syntactic/Functional/Sharing.hs
+++ b/src/Language/Syntactic/Functional/Sharing.hs
@@ -16,6 +16,7 @@
 
 
 
+import Control.Monad (liftM2, mplus)
 import Control.Monad.State
 import Data.Maybe (isNothing)
 import Data.Set (Set)
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
@@ -86,7 +86,7 @@
     deriveClassSimple ''Symbol ty [MatchingMethod 'symSig  symSigClause []]
   where
     symSigClause _ _ con arity =
-      Clause [ConP con (replicate arity WildP)] (NormalB (VarE 'signature)) []
+      Clause [conPat con (replicate arity WildP)] (NormalB (VarE 'signature)) []
 
 -- | Derive 'Equality' instance for a type
 --
@@ -110,8 +110,8 @@
       ]
   where
     equalClause _ _ con arity = Clause
-        [ ConP con [VarP v | v <- vs1]
-        , ConP con [VarP v | v <- vs2]
+        [ conPat con [VarP v | v <- vs1]
+        , conPat con [VarP v | v <- vs2]
         ]
         (NormalB body)
         []
@@ -129,7 +129,7 @@
                  )
 
     hashClause _ i con arity = Clause
-        [ConP con [VarP v | v <- vs]]
+        [conPat con [VarP v | v <- vs]]
         (NormalB body)
         []
       where
@@ -160,7 +160,7 @@
     conName = modify . nameBase
 
     renderClause _ _ con arity = Clause
-        [ConP con [VarP v | v <- take arity varSupply]]
+        [conPat con [VarP v | v <- take arity varSupply]]
         (NormalB body)
         []
       where
@@ -241,5 +241,12 @@
 tySynInst t as rhs = TySynInstD t (TySynEqn as rhs)
 #else
 tySynInst = TySynInstD
+#endif
+
+conPat :: Name -> [Pat] -> Pat
+#if __GLASGOW_HASKELL__ >= 902
+conPat name ps = ConP name [] ps
+#else
+conPat name ps = ConP name ps
 #endif
 
diff --git a/syntactic.cabal b/syntactic.cabal
--- a/syntactic.cabal
+++ b/syntactic.cabal
@@ -1,5 +1,5 @@
 Name:           syntactic
-Version:        3.8.3
+Version:        3.8.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
@@ -83,12 +83,12 @@
       Language.Syntactic.Sugar.TupleTyped
 
   build-depends:
-    base >= 4.6 && < 4.16,
+    base >= 4.6 && < 4.17,
     constraints < 0.14,
     containers < 0.7,
     data-hash < 0.3,
     deepseq < 1.5,
-    mtl >= 2 && < 2.3,
+    mtl >= 2 && < 2.4,
     syb < 0.8,
     tree-view >= 0.5 && < 0.6
 
