diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for general-allocate
 
+## 0.2.2.0 -- 2024-01-11
+
+* Allow newer versions of some dependencies
+* Fixing deriving MonadWith instances
+
 ## 0.2.1.4 -- 2023-03-01
 
 * Allow older `primitive`
diff --git a/general-allocate.cabal b/general-allocate.cabal
--- a/general-allocate.cabal
+++ b/general-allocate.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               general-allocate
-version:            0.2.1.4
+version:            0.2.2.0
 license:            Apache-2.0
 license-file:       LICENSE
 author:             Shea Levy
@@ -48,10 +48,10 @@
     Data.Exceptable
 
   build-depends:
-    , base             ^>= { 4.14, 4.16, 4.17 }
-    , containers       ^>= { 0.6 }
+    , base             ^>= { 4.14, 4.16, 4.17, 4.19 }
+    , containers       ^>= { 0.6, 0.7 }
     , mtl              ^>= { 2.2, 2.3 }
-    , primitive        ^>= { 0.7, 0.8 }
+    , primitive        ^>= { 0.7, 0.8, 0.9 }
     , resourcet        ^>= { 1.3 }
     , safe-exceptions  ^>= { 0.1 }
     , transformers     ^>= { 0.5, 0.6 }
diff --git a/src/Control/Monad/With.hs b/src/Control/Monad/With.hs
--- a/src/Control/Monad/With.hs
+++ b/src/Control/Monad/With.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE InstanceSigs #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE QuantifiedConstraints #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving #-}
@@ -40,6 +41,7 @@
 import Control.Monad.Trans.Resource.Internal
 import qualified Control.Monad.Writer.Lazy as L
 import Control.Monad.Writer.Strict
+import Data.Coerce
 import Data.Exceptable
 import Data.Functor
 import Data.Functor.Identity
@@ -57,7 +59,7 @@
 'IO', 'ST', and 'Identity' allow for writing monad-generic exception-safe code which can be properly
 instantiated in 'IO' or mocked out in 'ST'/'Identity' without changing the code.
 -}
-class Monad m ⇒ MonadWith m where
+class (Monad m, ∀ x y. Coercible x y ⇒ Coercible (m x) (m y)) ⇒ MonadWith m where
   -- | Data characterizing exceptional exit from the scope.
   type WithException m
 
@@ -174,7 +176,7 @@
 -}
 newtype WithNoContinuation m a = WithNoContinuation (m a) deriving newtype (Functor, Applicative, Monad)
 
-instance (Monad m) ⇒ MonadWith (WithNoContinuation m) where
+instance (Monad m, ∀ x y. Coercible x y ⇒ Coercible (m x) (m y)) ⇒ MonadWith (WithNoContinuation m) where
   type WithException (WithNoContinuation m) = Void
   stateThreadingGeneralWith (GeneralAllocate allocA) go = WithNoContinuation $ do
     let WithNoContinuation allocA' = allocA id
diff --git a/src/Control/Monad/With.hs-boot b/src/Control/Monad/With.hs-boot
--- a/src/Control/Monad/With.hs-boot
+++ b/src/Control/Monad/With.hs-boot
@@ -1,12 +1,14 @@
+{-# LANGUAGE QuantifiedConstraints #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE UnicodeSyntax #-}
 
 module Control.Monad.With where
 
 import Control.Exception.Safe
+import Data.Coerce
 import {-# SOURCE #-} Data.GeneralAllocate
 
-class Monad m ⇒ MonadWith m where
+class (Monad m, ∀ x y. Coercible x y ⇒ Coercible (m x) (m y)) ⇒ MonadWith m where
   type WithException m
   type WithException m = SomeException
   stateThreadingGeneralWith
