diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,8 +1,11 @@
 # Changelog for polysemy-zoo
 
+## 0.7.0.2 (2020-11-04)
+- Add support for GHC 9.0
+  ([#70](https://github.com/polysemy-research/polysemy-zoo/pull/70), thanks to @funketh)
 
 ## 0.7.0.1 (2020-10-06)
-* As a stop-gap for [#65](https://github.com/polysemy-research/polysemy-zoo/issues/65), the library has been rewritten to no longer use `polysemy-plugin`. This should allow GHC 8.10 users to use the library.
+- As a stop-gap for [#65](https://github.com/polysemy-research/polysemy-zoo/issues/65), the library has been rewritten to no longer use `polysemy-plugin`. This should allow GHC 8.10 users to use the library.
 
 ## 0.7.0.0 (2020-02-14)
 ### Breaking Changes
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -28,4 +28,4 @@
 
 * [kowainik/co-log](https://github.com/kowainik/co-log/tree/master/co-log-polysemy)
 * [adamConnerSax/polysemy-RandomFu](https://hackage.haskell.org/package/polysemy-RandomFu)
-
+* [lehmacdj/polysemy-readline](https://hackage.haskell.org/package/polysemy-readline)
diff --git a/polysemy-zoo.cabal b/polysemy-zoo.cabal
--- a/polysemy-zoo.cabal
+++ b/polysemy-zoo.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: a5563140d5d76f52bdcb2c1def770fca8613155455f2e76e5286d6a5cd6505a3
+-- hash: 21ba8ceb18ae6184f65237f20847dd9e3f23ad2838d46fc1cd6af719dac66eb3
 
 name:           polysemy-zoo
-version:        0.7.0.1
+version:        0.7.0.2
 synopsis:       Experimental, user-contributed effects and interpreters for polysemy
 description:    Please see the README on GitHub at <https://github.com/isovector/polysemy-zoo#readme>
 category:       Polysemy
@@ -63,7 +63,20 @@
       Paths_polysemy_zoo
   hs-source-dirs:
       src
-  default-extensions: DataKinds DeriveFunctor FlexibleContexts GADTs LambdaCase PolyKinds RankNTypes ScopedTypeVariables StandaloneDeriving TypeApplications TypeOperators TypeFamilies UnicodeSyntax
+  default-extensions:
+      DataKinds
+      DeriveFunctor
+      FlexibleContexts
+      GADTs
+      LambdaCase
+      PolyKinds
+      RankNTypes
+      ScopedTypeVariables
+      StandaloneDeriving
+      TypeApplications
+      TypeOperators
+      TypeFamilies
+      UnicodeSyntax
   ghc-options: -Wall
   build-depends:
       async >=2.2 && <3
@@ -73,12 +86,12 @@
     , containers >=0.5 && <0.7
     , contravariant <2
     , exceptions >=0.10.0 && <0.11
-    , ghc-prim >=0.5.2 && <0.7
+    , ghc-prim >=0.5.2 && <0.8
     , mtl >=2.0.1.0 && <3.0.0.0
     , polysemy >=1.2.1.0
     , random >=1.1 && <1.3
     , reflection >=2.1.4 && <3.0.0
-    , streaming >=0.2 && <0.3
+    , streaming ==0.2.*
     , text >=1.1.0 && <1.3
     , transformers >=0.5.2.0 && <0.6
   default-language: Haskell2010
@@ -99,7 +112,20 @@
       Paths_polysemy_zoo
   hs-source-dirs:
       test
-  default-extensions: DataKinds DeriveFunctor FlexibleContexts GADTs LambdaCase PolyKinds RankNTypes ScopedTypeVariables StandaloneDeriving TypeApplications TypeOperators TypeFamilies UnicodeSyntax
+  default-extensions:
+      DataKinds
+      DeriveFunctor
+      FlexibleContexts
+      GADTs
+      LambdaCase
+      PolyKinds
+      RankNTypes
+      ScopedTypeVariables
+      StandaloneDeriving
+      TypeApplications
+      TypeOperators
+      TypeFamilies
+      UnicodeSyntax
   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N -fplugin=Polysemy.Plugin
   build-tool-depends:
       hspec-discover:hspec-discover >=2.0
@@ -111,7 +137,7 @@
     , containers >=0.5 && <0.7
     , contravariant <2
     , exceptions >=0.10.0 && <0.11
-    , ghc-prim >=0.5.2 && <0.7
+    , ghc-prim >=0.5.2 && <0.8
     , hspec >=2.6.0 && <3
     , mtl >=2.0.1.0 && <3.0.0.0
     , polysemy >=1.2.0.0
@@ -119,7 +145,7 @@
     , polysemy-zoo
     , random >=1.1 && <1.3
     , reflection >=2.1.4 && <3.0.0
-    , streaming >=0.2 && <0.3
+    , streaming ==0.2.*
     , text >=1.1.0 && <1.3
     , transformers >=0.5.2.0 && <0.6
   default-language: Haskell2010
diff --git a/src/Polysemy/ConstraintAbsorber/MonadCatch.hs b/src/Polysemy/ConstraintAbsorber/MonadCatch.hs
--- a/src/Polysemy/ConstraintAbsorber/MonadCatch.hs
+++ b/src/Polysemy/ConstraintAbsorber/MonadCatch.hs
@@ -37,7 +37,7 @@
 -- | Like 'E.runError' but applies a given function from 'SomeException'
 -- to some other type, typically something less opaque.
 -- e.g.:
---  @runErrorForMonadCatch C.displayException@
+--  @runMonadCatch C.displayException@
 -- 
 -- @since 0.7.0.0
 runMonadCatch
@@ -80,7 +80,7 @@
        -- or 'C.MonadThrow' for
        -- 'Sem'. This might be something with type @'C.MonadCatch' e m => m a@.
   -> Sem r a
-absorbMonadThrow = absorbMonadCatch
+absorbMonadThrow main = absorbMonadCatch main
 {-# INLINABLE absorbMonadThrow #-}
 
 ------------------------------------------------------------------------------
diff --git a/src/Polysemy/ConstraintAbsorber/MonadCont.hs b/src/Polysemy/ConstraintAbsorber/MonadCont.hs
--- a/src/Polysemy/ConstraintAbsorber/MonadCont.hs
+++ b/src/Polysemy/ConstraintAbsorber/MonadCont.hs
@@ -28,7 +28,7 @@
        -- 'Sem'. This might be something with type @'C.MonadCont' m => m a@.
     -> Sem r a
 absorbCont = absorbWithSem @C.MonadCont @Action
-  (ContDict (callCC @ref))
+  (ContDict (\main -> callCC @ref $ \exit -> main exit))
   (Sub Dict)
 {-# INLINEABLE absorbCont #-}
 
diff --git a/src/Polysemy/IdempotentLowering.hs b/src/Polysemy/IdempotentLowering.hs
--- a/src/Polysemy/IdempotentLowering.hs
+++ b/src/Polysemy/IdempotentLowering.hs
@@ -89,7 +89,7 @@
     -> base (∀ z. Sem (e ': r) z -> m z)
 fi .@! gi = do
   f <- fi
-  g <- gi f
+  g <- gi (\x -> f x)
   nat $ \z -> f $ g z
 infixl 8 .@!
 
@@ -112,7 +112,7 @@
     -> base (∀ z. Sem (e ': r) z -> m (f z))
 fi .@@! gi = do
   f <- fi
-  g <- gi f
+  g <- gi (\x -> f x)
   nat' $ \z -> f $ g z
 infixl 8 .@@!
 
