diff --git a/.hlint.yaml b/.hlint.yaml
--- a/.hlint.yaml
+++ b/.hlint.yaml
@@ -1,4 +1,4 @@
-- arguments: [--cpp-define=HLINT, --cpp-ansi]
+- arguments: [-XCPP, --cpp-define=HLINT, --cpp-ansi]
 
 - ignore:
     name: Use camelCase
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+0.4.11 [2022.05.18]
+-------------------
+* Allow building with `mtl-2.3.*` and `transformers-0.6.*`.
+
 0.4.10 [2021.11.16]
 -------------------
 * Allow the test suite to build with recent GHCs.
diff --git a/ersatz.cabal b/ersatz.cabal
--- a/ersatz.cabal
+++ b/ersatz.cabal
@@ -1,5 +1,5 @@
 name:           ersatz
-version:        0.4.10
+version:        0.4.11
 license:        BSD3
 license-file:   LICENSE
 author:         Edward A. Kmett, Eric Mertens, Johan Kiviniemi
@@ -81,8 +81,8 @@
               , GHC == 8.6.5
               , GHC == 8.8.4
               , GHC == 8.10.7
-              , GHC == 9.0.1
-              , GHC == 9.2.1
+              , GHC == 9.0.2
+              , GHC == 9.2.2
 extra-source-files:
   .gitignore
   .hlint.yaml
@@ -172,12 +172,12 @@
     containers           >= 0.2.0.1  && < 0.7,
     data-default         >= 0.5      && < 0.8,
     lens                 >= 4        && < 6,
-    mtl                  >= 1.1      && < 2.3,
+    mtl                  >= 1.1      && < 2.4,
     process              >= 1.1      && < 1.7,
     semigroups           >= 0.16     && < 1,
     streams              >= 3.3      && < 4,
     temporary            >= 1.1      && < 1.4,
-    transformers         >= 0.3      && < 0.6,
+    transformers         >= 0.3      && < 0.7,
     unordered-containers == 0.2.*,
     attoparsec
 
diff --git a/src/Ersatz/Bit.hs b/src/Ersatz/Bit.hs
--- a/src/Ersatz/Bit.hs
+++ b/src/Ersatz/Bit.hs
@@ -27,7 +27,7 @@
 import qualified Prelude
 
 import Control.Applicative
-import Control.Monad.State
+import Control.Monad (MonadPlus(..), liftM2, liftM3)
 import Data.Foldable (toList)
 import qualified Data.Foldable as Foldable
 import qualified Data.Traversable as Traversable
diff --git a/src/Ersatz/Internal/Parser.hs b/src/Ersatz/Internal/Parser.hs
--- a/src/Ersatz/Internal/Parser.hs
+++ b/src/Ersatz/Internal/Parser.hs
@@ -19,7 +19,8 @@
   ) where
 
 import Control.Applicative
-import Control.Monad.State
+import Control.Monad (guard)
+import Control.Monad.Trans.State
 import Data.Char (isDigit)
 
 type Parser t a = StateT [t] [] a
diff --git a/src/Ersatz/Relation/Data.hs b/src/Ersatz/Relation/Data.hs
--- a/src/Ersatz/Relation/Data.hs
+++ b/src/Ersatz/Relation/Data.hs
@@ -14,9 +14,9 @@
 import Ersatz.Variable (exists)
 import Ersatz.Problem (MonadSAT)
 
+import Control.Monad (guard)
 import qualified Data.Array as A
 import Data.Array ( Array, Ix )
-import Control.Monad.State
 
 newtype Relation a b = Relation (A.Array (a, b) Bit)
 
