diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog for conduit
 
+## 1.3.4.2
+
+* Fix GHC 9.2 build [#473](https://github.com/snoyberg/conduit/pull/473)
+
 ## 1.3.4.1
 
 * Library and tests compile and run with GHC 9.0.1 [#455](https://github.com/snoyberg/conduit/pull/455)
diff --git a/conduit.cabal b/conduit.cabal
--- a/conduit.cabal
+++ b/conduit.cabal
@@ -1,5 +1,5 @@
 Name:                conduit
-Version:             1.3.4.1
+Version:             1.3.4.2
 Synopsis:            Streaming data processing library.
 description:
     `conduit` is a solution to the streaming data problem, allowing for production,
@@ -43,7 +43,7 @@
                        Data.Conduit.Combinators.Unqualified
                        Data.Streaming.FileRead
                        Data.Streaming.Filesystem
-  Build-depends:       base                     >= 4.9          && < 5
+  Build-depends:       base                     >= 4.12         && < 5
                      , resourcet                >= 1.2          && < 1.3
                      , transformers             >= 0.4
                      , mtl
diff --git a/src/Data/Conduit/Internal/Conduit.hs b/src/Data/Conduit/Internal/Conduit.hs
--- a/src/Data/Conduit/Internal/Conduit.hs
+++ b/src/Data/Conduit/Internal/Conduit.hs
@@ -328,8 +328,8 @@
         recurse = goLeft rp rc
 
 sourceToPipe :: Monad m => Source m o -> Pipe l i o u m ()
-sourceToPipe =
-    go . (`unConduitT` Done)
+sourceToPipe (ConduitT k) =
+    go $ k Done
   where
     go (HaveOutput p o) = HaveOutput (go p) o
     go (NeedInput _ c) = go $ c ()
@@ -338,8 +338,8 @@
     go (Leftover p ()) = go p
 
 sinkToPipe :: Monad m => Sink i m r -> Pipe l i o u m r
-sinkToPipe =
-    go . injectLeftovers . (`unConduitT` Done)
+sinkToPipe (ConduitT k) =
+    go $ injectLeftovers $ k Done
   where
     go (HaveOutput _ o) = absurd o
     go (NeedInput p c) = NeedInput (go . p) (const $ go $ c ())
@@ -348,8 +348,8 @@
     go (Leftover _ l) = absurd l
 
 conduitToPipe :: Monad m => Conduit i m o -> Pipe l i o u m ()
-conduitToPipe =
-    go . injectLeftovers . (`unConduitT` Done)
+conduitToPipe (ConduitT k) =
+    go $ injectLeftovers $ k Done
   where
     go (HaveOutput p o) = HaveOutput (go p) o
     go (NeedInput p c) = NeedInput (go . p) (const $ go $ c ())
@@ -401,8 +401,9 @@
        -> ConduitT i o m r
 catchC (ConduitT p0) onErr = ConduitT $ \rest -> let
     go (Done r) = rest r
-    go (PipeM mp) = PipeM $ withRunInIO $ \run -> E.catch (run (liftM go mp))
-        (return . (`unConduitT`rest) . onErr)
+    go (PipeM mp) = PipeM $ withRunInIO $ \ run ->
+      run (liftM go mp) `E.catch` \ e ->
+        return $ onErr e `unConduitT` rest
     go (Leftover p i) = Leftover (go p) i
     go (NeedInput x y) = NeedInput (go . x) (go . y)
     go (HaveOutput p o) = HaveOutput (go p) o
@@ -693,8 +694,8 @@
 --
 -- Since 1.2.6
 sourceToList :: Monad m => Source m a -> m [a]
-sourceToList =
-    go . (`unConduitT` Done)
+sourceToList (ConduitT k) =
+    go $ k Done
   where
     go (Done _) = return []
     go (HaveOutput src x) = liftM (x:) (go src)
