diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog for conduit
 
+## 1.3.4.1
+
+* Library and tests compile and run with GHC 9.0.1 [#455](https://github.com/snoyberg/conduit/pull/455)
+
 ## 1.3.4
 
 * Add `foldWhile` [#453](https://github.com/snoyberg/conduit/issues/453) [#456](https://github.com/snoyberg/conduit/pull/456).
diff --git a/conduit.cabal b/conduit.cabal
--- a/conduit.cabal
+++ b/conduit.cabal
@@ -1,5 +1,5 @@
 Name:                conduit
-Version:             1.3.4
+Version:             1.3.4.1
 Synopsis:            Streaming data processing library.
 description:
     `conduit` is a solution to the streaming data problem, allowing for production,
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
@@ -360,7 +360,7 @@
 -- | Generalize a 'Source' to a 'Producer'.
 --
 -- Since 1.0.0
-toProducer :: Monad m => Source m a -> Producer m a
+toProducer :: Monad m => Source m a -> ConduitT i a m ()
 toProducer (ConduitT c0) = ConduitT $ \rest -> let
     go (HaveOutput p o) = HaveOutput (go p) o
     go (NeedInput _ c) = go (c ())
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -264,7 +264,7 @@
             x <- runConduitRes $
                 CI.ConduitT
                     ((CI.unConduitT (CL.sourceList [1..10]) CI.Done
-                    CI.>+> CI.injectLeftovers (flip CI.unConduitT CI.Done $ CL.map (* 2))) >>=)
+                    CI.>+> CI.injectLeftovers ((`CI.unConduitT` CI.Done) $ CL.map (* 2))) >>=)
                     .| CL.fold (+) 0
             x `shouldBe` 2 * sum [1..10 :: Int]
 
@@ -580,8 +580,8 @@
             y <- runConduit $ CL.sourceList [1..10 :: Int] .| CL.fold (+) 0
             x `shouldBe` y
         it' "right identity" $ do
-            x <- CI.runPipe $ mapM_ CI.yield [1..10 :: Int] CI.>+> (CI.injectLeftovers $ flip CI.unConduitT CI.Done $ CL.fold (+) 0) CI.>+> CI.idP
-            y <- CI.runPipe $ mapM_ CI.yield [1..10 :: Int] CI.>+> (CI.injectLeftovers $ flip CI.unConduitT CI.Done $ CL.fold (+) 0)
+            x <- CI.runPipe $ mapM_ CI.yield [1..10 :: Int] CI.>+> (CI.injectLeftovers $ (`CI.unConduitT` CI.Done) $ CL.fold (+) 0) CI.>+> CI.idP
+            y <- CI.runPipe $ mapM_ CI.yield [1..10 :: Int] CI.>+> (CI.injectLeftovers $ (`CI.unConduitT` CI.Done) $ CL.fold (+) 0)
             x `shouldBe` y
 
     describe "generalizing" $ do
@@ -630,7 +630,7 @@
     describe "injectLeftovers" $ do
         it "works" $ do
             let src = mapM_ CI.yield [1..10 :: Int]
-                conduit = CI.injectLeftovers $ flip CI.unConduitT CI.Done $ C.awaitForever $ \i -> do
+                conduit = CI.injectLeftovers $ (`CI.unConduitT` CI.Done) $ C.awaitForever $ \i -> do
                     js <- CL.take 2
                     mapM_ C.leftover $ reverse js
                     C.yield i
