diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,15 @@
 Changelog
 =========
 
+Version 0.4.1.1
+---------------
+
+*January 29, 2023*
+
+<https://github.com/mstksg/functor-combinators/releases/tag/v0.4.1.1>
+
+*   Fix builds and warnings for GHC 9.2 and base 4.16
+
 Version 0.4.1.0
 ---------------
 
diff --git a/functor-combinators.cabal b/functor-combinators.cabal
--- a/functor-combinators.cabal
+++ b/functor-combinators.cabal
@@ -7,7 +7,7 @@
 -- hash: c98f05061d45352f630dd964c7671a2a414e5708a12f8f4f8a39d61b986f6f5d
 
 name:           functor-combinators
-version:        0.4.1.0
+version:        0.4.1.1
 synopsis:       Tools for functor combinator-based program design
 description:    Tools for working with /functor combinators/: types that take functors (or
                 other indexed types) and returns a new functor that "enhances" or "mixes"
diff --git a/src/Control/Monad/Freer/Church.hs b/src/Control/Monad/Freer/Church.hs
--- a/src/Control/Monad/Freer/Church.hs
+++ b/src/Control/Monad/Freer/Church.hs
@@ -95,7 +95,7 @@
     (<.>) = ap
 
 instance Applicative (Free f) where
-    pure  = return
+    pure x = Free $ \p _ -> p x
     (<*>) = (<.>)
 
 instance Pointed (Free f) where
@@ -105,7 +105,6 @@
     x >>- f  = Free $ \p b -> runFree x (\y -> runFree (f y) p b) b
 
 instance Monad (Free f) where
-    return x = Free $ \p _ -> p x
     (>>=)    = (>>-)
 
 instance M.MonadFree f (Free f) where
diff --git a/src/Data/Functor/Invariant/Inplicative.hs b/src/Data/Functor/Invariant/Inplicative.hs
--- a/src/Data/Functor/Invariant/Inplicative.hs
+++ b/src/Data/Functor/Invariant/Inplicative.hs
@@ -463,10 +463,14 @@
 deriving via WrappedFunctor Semigroup.Last instance Inply Semigroup.Last
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Last instance Inplicative Semigroup.Last
+
+#if !MIN_VERSION_base(4,16,0)
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Option instance Inply Semigroup.Option
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Option instance Inplicative Semigroup.Option
+#endif
+
 -- | @since 0.4.1.0
 deriving via WrappedFunctor ZipList instance Inply ZipList
 -- | @since 0.4.1.0
@@ -515,8 +519,17 @@
 deriving via WrappedFunctor IM.IntMap instance Inply IM.IntMap
 -- | @since 0.4.1.0
 deriving via WrappedFunctor (M.Map k) instance Ord k => Inply (M.Map k)
+
+#if MIN_VERSION_base(4,16,0)
+-- | Does not require Eq k since base-4.16
+--
+-- @since 0.4.1.0
+deriving via WrappedFunctor (HM.HashMap k) instance Hashable k => Inply (HM.HashMap k)
+#else
 -- | @since 0.4.1.0
 deriving via WrappedFunctor (HM.HashMap k) instance (Hashable k, Eq k) => Inply (HM.HashMap k)
+#endif
+
 -- | @since 0.4.1.0
 deriving via WrappedFunctor (Const w :: Type -> Type) instance Semigroup w => Inply (Const w)
 -- | @since 0.4.1.0
diff --git a/src/Data/Functor/Invariant/Internative.hs b/src/Data/Functor/Invariant/Internative.hs
--- a/src/Data/Functor/Invariant/Internative.hs
+++ b/src/Data/Functor/Invariant/Internative.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP         #-}
 {-# LANGUAGE DerivingVia #-}
 
 -- |
@@ -275,12 +276,16 @@
 deriving via WrappedFunctor Semigroup.First instance Inalt Semigroup.First
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Last instance Inalt Semigroup.Last
+
+#if !MIN_VERSION_base(4,16,0)
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Option instance Inalt Semigroup.Option
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Option instance Inplus Semigroup.Option
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Semigroup.Option instance Internative Semigroup.Option
+#endif
+
 -- | @since 0.4.1.0
 deriving via WrappedFunctor Monoid.First instance Inalt Monoid.First
 -- | @since 0.4.1.0
@@ -319,8 +324,16 @@
 deriving via WrappedFunctor (M.Map k) instance Ord k => Inalt (M.Map k)
 -- | @since 0.4.1.0
 deriving via WrappedFunctor (NEM.NEMap k) instance Ord k => Inalt (NEM.NEMap k)
--- | @since 0.4.1.0
+
+#if MIN_VERSION_base(4,16,0)
+-- | Does not require Eq k since base-4.16
+--
+-- @since 0.4.1.0
+deriving via WrappedFunctor (HM.HashMap k) instance Hashable k => Inalt (HM.HashMap k)
+#else
 deriving via WrappedFunctor (HM.HashMap k) instance (Hashable k, Eq k) => Inalt (HM.HashMap k)
+#endif
+
 -- | @since 0.4.1.0
 deriving via WrappedFunctor (WrappedMonad m) instance MonadPlus m => Inalt (WrappedMonad m)
 -- | @since 0.4.1.0
diff --git a/src/Data/HFunctor.hs b/src/Data/HFunctor.hs
--- a/src/Data/HFunctor.hs
+++ b/src/Data/HFunctor.hs
@@ -655,12 +655,12 @@
       where
         EnvT e' y = f x
 
-instance (HBind t, Inject t) => HBind (HLift t) where
+instance HBind t => HBind (HLift t) where
     hbind f = \case
       HPure   x -> f x
-      HOther x -> HOther $ (`hbind` x) $ \y -> case f y of
+      HOther x -> HOther $ (\y -> case f y of
         HPure  z -> inject z
-        HOther z -> z
+        HOther z -> z) `hbind` x
 
 -- | 'HFree' is the "free 'HBind'" for any 'HFunctor'
 instance HFunctor t => HBind (HFree t) where
diff --git a/src/Data/HFunctor/Chain.hs b/src/Data/HFunctor/Chain.hs
--- a/src/Data/HFunctor/Chain.hs
+++ b/src/Data/HFunctor/Chain.hs
@@ -88,7 +88,7 @@
 import qualified Data.Functor.Invariant.Day           as ID
 import qualified Data.Functor.Invariant.Night         as IN
 
-instance (HBifunctor t, SemigroupIn t f) => Interpret (Chain1 t) f where
+instance SemigroupIn t f => Interpret (Chain1 t) f where
     retract = \case
       Done1 x  -> x
       More1 xs -> binterpret id retract xs
@@ -254,7 +254,7 @@
 -- a non-empty linked list of @f@s.  This witnesses the fact that
 -- a @'Chain' t i f@ is either empty (@i@) or non-empty (@'Chain1' t f@).
 matchingChain
-    :: forall t i f. (Tensor t i, Matchable t i, FunctorBy t f)
+    :: forall t i f. (Matchable t i, FunctorBy t f)
     => Chain t i f <~> i :+: Chain1 t f
 matchingChain = fromF unrolling
               . matchingLB @t
diff --git a/src/Data/HFunctor/Final.hs b/src/Data/HFunctor/Final.hs
--- a/src/Data/HFunctor/Final.hs
+++ b/src/Data/HFunctor/Final.hs
@@ -168,7 +168,6 @@
     (<*>)  = liftFinal2 (<*>)
     liftA2 f = liftFinal2 (liftA2 f)
 instance Monad (Final Monad f) where
-    return x = liftFinal0 (return x)
     x >>= f  = Final $ \r -> do
       y <- runFinal x r
       runFinal (f y) r
@@ -180,7 +179,6 @@
     (<*>)  = liftFinal2 (<*>)
     liftA2 f = liftFinal2 (liftA2 f)
 instance Monad (Final MonadPlus f) where
-    return x = liftFinal0 (return x)
     x >>= f  = Final $ \r -> do
       y <- runFinal x r
       runFinal (f y) r
@@ -210,7 +208,6 @@
     (<.>) = liftFinal2 (<*>)
     liftF2 f = liftFinal2 (liftA2 f)
 instance Monad (Final (MonadReader r) f) where
-    return x = liftFinal0 (return x)
     x >>= f  = Final $ \r -> do
       y <- runFinal x r
       runFinal (f y) r
diff --git a/test/Tests/Util.hs b/test/Tests/Util.hs
--- a/test/Tests/Util.hs
+++ b/test/Tests/Util.hs
@@ -110,10 +110,10 @@
       Ap.Ap x xs -> showsBinaryWith gshowsPrec gshowsPrec "Ap" d x xs
 
 instance GShow f => GShow (FA.Ap f) where
-    gshowsPrec d = gshowsPrec @(Ap f) d . FA.runAp Ap.liftAp
+    gshowsPrec d = gshowsPrec d . FA.runAp Ap.liftAp
 
 instance GShow f => GShow (FAF.Ap f) where
-    gshowsPrec d = gshowsPrec @(Ap f) d . FAF.runAp Ap.liftAp
+    gshowsPrec d = gshowsPrec d . FAF.runAp Ap.liftAp
 
 instance GShow f => Show (Ap f a) where
     showsPrec = gshowsPrec
