diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for cauldron
 
+## 0.9.0.1
+
+* compat with GHC 9.8.4.
+
 ## 0.9.0.0
 
 * breaking change: `SomeRecipe` type hidden.
diff --git a/cauldron.cabal b/cauldron.cabal
--- a/cauldron.cabal
+++ b/cauldron.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.4
 name:               cauldron
-version:            0.9.0.0
+version:            0.9.0.1
 synopsis:           Dependency injection library
 description:        Dependency injection library that wires things at runtime.
 license:            BSD-3-Clause
@@ -12,7 +12,7 @@
 extra-doc-files:    README.md, CHANGELOG.md
 -- extra-source-files:
 category: Dependency Injection
-tested-with: GHC ==9.10.1, GHC==9.12.2
+tested-with:  GHC == {9.8.4, 9.10.1, 9.12.2}
 source-repository    head
     type:     git
     location: https://github.com/danidiaz/cauldron.git
@@ -26,7 +26,7 @@
 common common-lib
     import: common-base
     build-depends:
-      containers >= 0.7 && < 0.9,
+      containers >= 0.6.8 && < 0.9,
 
 common common-tests
     import: common-lib
diff --git a/lib-graph/Cauldron/Graph/Algorithm.hs b/lib-graph/Cauldron/Graph/Algorithm.hs
--- a/lib-graph/Cauldron/Graph/Algorithm.hs
+++ b/lib-graph/Cauldron/Graph/Algorithm.hs
@@ -24,7 +24,10 @@
       sccs = Data.Graph.stronglyConnComp theEdges
   for_ sccs $ \case
     Data.Graph.AcyclicSCC _ -> pure ()
-    Data.Graph.NECyclicSCC vs -> do
+    -- we should use 
+    -- @Data.Graph.NECyclicSCC vs@
+    -- for containers >= 0.7
+    Data.Graph.CyclicSCC (Data.List.NonEmpty.fromList -> vs) -> do
       let aCycle = findCycleInSCC g vs
       Left aCycle
   let (g', nodeFromVertex, _) = Data.Graph.graphFromEdges theEdges
diff --git a/lib/Cauldron.hs b/lib/Cauldron.hs
--- a/lib/Cauldron.hs
+++ b/lib/Cauldron.hs
@@ -1,13 +1,17 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DerivingVia #-}
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE RequiredTypeArguments #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE ViewPatterns #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE TypeAbstractions #-}
+#if MIN_VERSION_GLASGOW_HASKELL(9,10,1,0)
+{-# LANGUAGE RequiredTypeArguments #-}
+#endif
 
 -- | This is a library for performing dependency injection. It's an alternative
 -- to manually wiring your functions and passing all required parameters
@@ -70,8 +74,10 @@
     empty,
     recipe,
     singleton,
+#if MIN_VERSION_GLASGOW_HASKELL(9,10,1,0)
     (|=|),
     (䷱),
+#endif
     insert,
     adjust,
     Cauldron.lookup,
@@ -475,6 +481,9 @@
 recipe theRecipe = withFrozenCallStack do
   mempty & insert theRecipe
 
+
+#if MIN_VERSION_GLASGOW_HASKELL(9,10,1,0)
+
 -- | Operator variant of 'recipe' where the @bean@ type is a [required type argument](https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/required_type_arguments.html).
 --
 -- '(|=|)' and '(䷱)' are the same function.
@@ -499,6 +508,8 @@
 
 infixr 0 ䷱
 
+#endif
+
 -- | Put a 'Recipe' into the 'Cauldron'.
 --
 -- Only one recipe is allowed for each bean type, so 'insert' for a
@@ -1531,17 +1542,33 @@
 -- :}
 -- "Sum Int is aggregate and primary"
 
+#if MIN_VERSION_GLASGOW_HASKELL(9,10,1,0)
 -- $setup
+-- >>> :set -XRequiredTypeArguments
 -- >>> :set -XBlockArguments
 -- >>> :set -XApplicativeDo
 -- >>> :set -XOverloadedLists
--- >>> :set -XRequiredTypeArguments
 -- >>> :set -XExplicitNamespaces
 -- >>> :set -Wno-incomplete-uni-patterns
 -- >>> import Data.Functor.Identity
 -- >>> import Data.Function ((&))
 -- >>> import Data.Monoid
--- >>> import Data.Either (either, isLeft)
+-- >>> import Data.Either (either)
 -- >>> import Control.Exception (throwIO)
 -- >>> import System.IO
 -- >>> import Cauldron.Managed
+#else
+-- $setup
+-- >>> :set -XBlockArguments
+-- >>> :set -XApplicativeDo
+-- >>> :set -XOverloadedLists
+-- >>> :set -XExplicitNamespaces
+-- >>> :set -Wno-incomplete-uni-patterns
+-- >>> import Data.Functor.Identity
+-- >>> import Data.Function ((&))
+-- >>> import Data.Monoid
+-- >>> import Data.Either (either)
+-- >>> import Control.Exception (throwIO)
+-- >>> import System.IO
+-- >>> import Cauldron.Managed
+#endif
