diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 *Megaparsec follows [SemVer](https://semver.org/).*
 
+## Megaparsec 9.4.1
+
+* Removed `Monad m` constraints in several places where they were introduced
+  in 9.4.0. [Issue 532](https://github.com/mrkkrp/megaparsec/issues/532).
+
 ## Megaparsec 9.4.0
 
 * `dbg` now prints hints among other debug information. [PR
diff --git a/Text/Megaparsec/Debug.hs b/Text/Megaparsec/Debug.hs
--- a/Text/Megaparsec/Debug.hs
+++ b/Text/Megaparsec/Debug.hs
@@ -216,7 +216,7 @@
   show (ShowComment lbl (a, c)) = show a ++ " (" ++ lbl ++ ": " ++ show c ++ ")"
 
 instance
-  (VisualStream s, ShowErrorComponent e, Monad m) =>
+  (VisualStream s, ShowErrorComponent e) =>
   MonadParsecDbg e s (ParsecT e s m)
   where
   dbg lbl p = ParsecT $ \s cok cerr eok eerr ->
diff --git a/Text/Megaparsec/Internal.hs b/Text/Megaparsec/Internal.hs
--- a/Text/Megaparsec/Internal.hs
+++ b/Text/Megaparsec/Internal.hs
@@ -151,7 +151,7 @@
 
 -- | @since 6.3.0
 instance
-  (a ~ Tokens s, IsString a, Eq a, Stream s, Ord e, Monad m) =>
+  (a ~ Tokens s, IsString a, Eq a, Stream s, Ord e) =>
   IsString (ParsecT e s m a)
   where
   fromString s = tokens (==) (fromString s)
@@ -285,6 +285,23 @@
         Error e -> eerr e s'
 {-# INLINE mkParsecT #-}
 
+pmkParsec ::
+  (Stream s) =>
+  (State s e -> Reply e s a) ->
+  ParsecT e s m a
+pmkParsec k = ParsecT $ \s cok cerr eok eerr ->
+  let (Reply s' consumption result) = k s
+   in case consumption of
+        Consumed ->
+          case result of
+            OK hs x -> cok x s' hs
+            Error e -> cerr e s'
+        NotConsumed ->
+          case result of
+            OK hs x -> eok x s' hs
+            Error e -> eerr e s'
+{-# INLINE pmkParsec #-}
+
 -- | 'mzero' is a parser that __fails__ without consuming input.
 --
 -- __Note__: strictly speaking, this instance is unlawful. The right
@@ -341,7 +358,7 @@
   lift amb = ParsecT $ \s _ _ eok _ ->
     amb >>= \a -> eok a s mempty
 
-instance (Ord e, Stream s, Monad m) => MonadParsec e s (ParsecT e s m) where
+instance (Ord e, Stream s) => MonadParsec e s (ParsecT e s m) where
   parseError = pParseError
   label = pLabel
   try = pTry
@@ -357,7 +374,7 @@
   takeP = pTakeP
   getParserState = pGetParserState
   updateParserState = pUpdateParserState
-  mkParsec f = mkParsecT (pure . f)
+  mkParsec = pmkParsec
 
 pParseError ::
   ParseError s e ->
diff --git a/megaparsec.cabal b/megaparsec.cabal
--- a/megaparsec.cabal
+++ b/megaparsec.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.4
 name:            megaparsec
-version:         9.4.0
+version:         9.4.1
 license:         BSD-2-Clause
 license-file:    LICENSE.md
 maintainer:      Mark Karpov <markkarpov92@gmail.com>
