diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,10 @@
+# 0.9.2.0
+
+## Added features
+
+ * Heterogeneous variants of `like_` and `similarTo_`: `like_'` and `similarTo_'`
+ * GHC 9.2 and 9.0 support
+
 # 0.9.1.0
 
 ## Added features
diff --git a/Database/Beam/Backend/SQL/Row.hs b/Database/Beam/Backend/SQL/Row.hs
--- a/Database/Beam/Backend/SQL/Row.hs
+++ b/Database/Beam/Backend/SQL/Row.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE PolyKinds #-}
 
 module Database.Beam.Backend.SQL.Row
@@ -57,7 +58,11 @@
   ParseOneField :: (BackendFromField be a, Typeable a) => (a -> f) -> FromBackendRowF be f
   Alt :: FromBackendRowM be a -> FromBackendRowM be a -> (a -> f) -> FromBackendRowF be f
   FailParseWith :: BeamRowReadError -> FromBackendRowF be f
-deriving instance Functor (FromBackendRowF be)
+instance Functor (FromBackendRowF be) where
+  fmap f = \case
+    ParseOneField p -> ParseOneField $ f . p
+    Alt a b p -> Alt a b $ f . p
+    FailParseWith e -> FailParseWith e
 newtype FromBackendRowM be a = FromBackendRowM (F (FromBackendRowF be) a)
   deriving (Functor, Applicative)
 
@@ -192,7 +197,9 @@
                       pure ()))
   valuesNeeded be _ = valuesNeeded be (Proxy @x)
 
+#if !MIN_VERSION_base(4, 16, 0)
 deriving instance Generic (a, b, c, d, e, f, g, h)
+#endif
 
 instance (BeamBackend be, FromBackendRow be t) => FromBackendRow be (Tagged tag t) where
   fromBackendRow = Tagged <$> fromBackendRow
diff --git a/Database/Beam/Query/Operator.hs b/Database/Beam/Query/Operator.hs
--- a/Database/Beam/Query/Operator.hs
+++ b/Database/Beam/Query/Operator.hs
@@ -6,6 +6,7 @@
   , (&&?.), (||?.), sqlNot_
 
   , like_, similarTo_
+  , like_', similarTo_'
 
   , concat_
   ) where
@@ -59,17 +60,43 @@
 infixr 2 ||., ||?.
 
 -- | SQL @LIKE@ operator
-like_ :: ( BeamSqlBackendIsString be text
-         , BeamSqlBackend be )
-      => QGenExpr ctxt be s text -> QGenExpr ctxt be s text -> QGenExpr ctxt be s Bool
-like_ (QExpr scrutinee) (QExpr search) =
+like_
+  :: (BeamSqlBackendIsString be text, BeamSqlBackend be)
+  => QGenExpr ctxt be s text
+  -> QGenExpr ctxt be s text
+  -> QGenExpr ctxt be s Bool
+like_ = like_'
+
+-- | SQL @LIKE@ operator but heterogeneous over the text type
+like_'
+  :: ( BeamSqlBackendIsString be left
+     , BeamSqlBackendIsString be right
+     , BeamSqlBackend be
+     )
+  => QGenExpr ctxt be s left
+  -> QGenExpr ctxt be s right
+  -> QGenExpr ctxt be s Bool
+like_' (QExpr scrutinee) (QExpr search) =
   QExpr (liftA2 likeE scrutinee search)
 
 -- | SQL99 @SIMILAR TO@ operator
-similarTo_ :: ( BeamSqlBackendIsString be text
-              , BeamSql99ExpressionBackend be )
-           => QGenExpr ctxt be s text -> QGenExpr ctxt be s text -> QGenExpr ctxt be s text
-similarTo_ (QExpr scrutinee) (QExpr search) =
+similarTo_
+  :: (BeamSqlBackendIsString be text, BeamSql99ExpressionBackend be)
+  => QGenExpr ctxt be s text
+  -> QGenExpr ctxt be s text
+  -> QGenExpr ctxt be s text
+similarTo_ = similarTo_'
+
+-- | SQL99 @SIMILAR TO@ operator but heterogeneous over the text type
+similarTo_'
+  :: ( BeamSqlBackendIsString be left
+     , BeamSqlBackendIsString be right
+     , BeamSql99ExpressionBackend be
+     )
+  => QGenExpr ctxt be s left
+  -> QGenExpr ctxt be s right
+  -> QGenExpr ctxt be s left
+similarTo_' (QExpr scrutinee) (QExpr search) =
   QExpr (liftA2 similarToE scrutinee search)
 
 infix 4 `like_`, `similarTo_`
diff --git a/beam-core.cabal b/beam-core.cabal
--- a/beam-core.cabal
+++ b/beam-core.cabal
@@ -2,7 +2,7 @@
 -- see http://haskell.org/cabal/users-guide/
 
 name:                beam-core
-version:             0.9.1.0
+version:             0.9.2.0
 synopsis:            Type-safe, feature-complete SQL query and manipulation interface for Haskell
 description:         Beam is a Haskell library for type-safe querying and manipulation of SQL databases.
                      Beam is modular and supports various backends. In order to use beam, you will need to use
@@ -63,19 +63,19 @@
   build-depends:       base         >=4.9     && <5.0,
                        aeson        >=0.11    && <1.6,
                        text         >=1.2.2.0 && <1.3,
-                       bytestring   >=0.10    && <0.11,
+                       bytestring   >=0.10    && <0.12,
                        mtl          >=2.2.1   && <2.3,
                        microlens    >=0.4     && <0.5,
-                       ghc-prim     >=0.5     && <0.7,
+                       ghc-prim     >=0.5     && <0.9,
                        free         >=4.12    && <5.2,
-                       dlist        >=0.7.1.2 && <0.9,
-                       time         >=1.6     && <1.10,
-                       hashable     >=1.2.4.0 && <1.4,
+                       dlist        >=0.7.1.2 && <1.1,
+                       time         >=1.6     && <1.12,
+                       hashable     >=1.2.4.0 && <1.5,
                        network-uri  >=2.6     && <2.7,
                        containers   >=0.5     && <0.7,
                        scientific   >=0.3     && <0.4,
                        vector       >=0.11    && <0.13,
-                       vector-sized >=0.5     && <1.5,
+                       vector-sized >=0.5     && <1.6,
                        tagged       >=0.8     && <0.9
 
   Default-language:    Haskell2010
diff --git a/test/Database/Beam/Test/SQL.hs b/test/Database/Beam/Test/SQL.hs
--- a/test/Database/Beam/Test/SQL.hs
+++ b/test/Database/Beam/Test/SQL.hs
@@ -868,7 +868,7 @@
 related :: TestTree
 related =
   testCase "related_ generate the correct ON conditions" $
-  do SqlSelect Select { .. } <-
+  do SqlSelect Select{} <-
        pure $ selectMock $
        do r <- all_ (_roles employeeDbSettings)
           e <- related_ (_employees employeeDbSettings) (_roleForEmployee r)
