diff --git a/parsers.cabal b/parsers.cabal
--- a/parsers.cabal
+++ b/parsers.cabal
@@ -1,6 +1,6 @@
 name:          parsers
 category:      Text, Parsing
-version:       0.12
+version:       0.12.1
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
diff --git a/src/Text/Parser/Char.hs b/src/Text/Parser/Char.hs
--- a/src/Text/Parser/Char.hs
+++ b/src/Text/Parser/Char.hs
@@ -223,7 +223,7 @@
   text t = t <$ string (unpack t)
   {-# INLINE text #-}
 
-instance (CharParsing m, MonadPlus m, Show s) => CharParsing (Lazy.StateT s m) where
+instance (CharParsing m, MonadPlus m) => CharParsing (Lazy.StateT s m) where
   satisfy = lift . satisfy
   {-# INLINE satisfy #-}
   char    = lift . char
@@ -237,7 +237,7 @@
   text = lift . text
   {-# INLINE text #-}
 
-instance (CharParsing m, MonadPlus m, Show s) => CharParsing (Strict.StateT s m) where
+instance (CharParsing m, MonadPlus m) => CharParsing (Strict.StateT s m) where
   satisfy = lift . satisfy
   {-# INLINE satisfy #-}
   char    = lift . char
@@ -265,7 +265,7 @@
   text = lift . text
   {-# INLINE text #-}
 
-instance (CharParsing m, MonadPlus m, Monoid w, Show w) => CharParsing (Strict.WriterT w m) where
+instance (CharParsing m, MonadPlus m, Monoid w) => CharParsing (Strict.WriterT w m) where
   satisfy = lift . satisfy
   {-# INLINE satisfy #-}
   char    = lift . char
@@ -279,7 +279,7 @@
   text = lift . text
   {-# INLINE text #-}
 
-instance (CharParsing m, MonadPlus m, Monoid w, Show w) => CharParsing (Lazy.WriterT w m) where
+instance (CharParsing m, MonadPlus m, Monoid w) => CharParsing (Lazy.WriterT w m) where
   satisfy = lift . satisfy
   {-# INLINE satisfy #-}
   char    = lift . char
@@ -293,7 +293,7 @@
   text = lift . text
   {-# INLINE text #-}
 
-instance (CharParsing m, MonadPlus m, Monoid w, Show w, Show s) => CharParsing (Lazy.RWST r w s m) where
+instance (CharParsing m, MonadPlus m, Monoid w) => CharParsing (Lazy.RWST r w s m) where
   satisfy = lift . satisfy
   {-# INLINE satisfy #-}
   char    = lift . char
@@ -307,7 +307,7 @@
   text = lift . text
   {-# INLINE text #-}
 
-instance (CharParsing m, MonadPlus m, Monoid w, Show w, Show s) => CharParsing (Strict.RWST r w s m) where
+instance (CharParsing m, MonadPlus m, Monoid w) => CharParsing (Strict.RWST r w s m) where
   satisfy = lift . satisfy
   {-# INLINE satisfy #-}
   char    = lift . char
diff --git a/src/Text/Parser/Combinators.hs b/src/Text/Parser/Combinators.hs
--- a/src/Text/Parser/Combinators.hs
+++ b/src/Text/Parser/Combinators.hs
@@ -278,7 +278,7 @@
   -- >  keywordLet  = try $ string "let" <* notFollowedBy alphaNum
   notFollowedBy :: Show a => m a -> m ()
 
-instance (Parsing m, MonadPlus m, Show s) => Parsing (Lazy.StateT s m) where
+instance (Parsing m, MonadPlus m) => Parsing (Lazy.StateT s m) where
   try (Lazy.StateT m) = Lazy.StateT $ try . m
   {-# INLINE try #-}
   Lazy.StateT m <?> l = Lazy.StateT $ \s -> m s <?> l
@@ -288,10 +288,10 @@
   eof = lift eof
   {-# INLINE eof #-}
   notFollowedBy (Lazy.StateT m) = Lazy.StateT
-    $ \s -> notFollowedBy (m s) >> return ((),s)
+    $ \s -> notFollowedBy (fst <$> m s) >> return ((),s)
   {-# INLINE notFollowedBy #-}
 
-instance (Parsing m, MonadPlus m, Show s) => Parsing (Strict.StateT s m) where
+instance (Parsing m, MonadPlus m) => Parsing (Strict.StateT s m) where
   try (Strict.StateT m) = Strict.StateT $ try . m
   {-# INLINE try #-}
   Strict.StateT m <?> l = Strict.StateT $ \s -> m s <?> l
@@ -301,7 +301,7 @@
   eof = lift eof
   {-# INLINE eof #-}
   notFollowedBy (Strict.StateT m) = Strict.StateT
-    $ \s -> notFollowedBy (m s) >> return ((),s)
+    $ \s -> notFollowedBy (fst <$> m s) >> return ((),s)
   {-# INLINE notFollowedBy #-}
 
 instance (Parsing m, MonadPlus m) => Parsing (ReaderT e m) where
@@ -318,7 +318,7 @@
   notFollowedBy (ReaderT m) = ReaderT $ notFollowedBy . m
   {-# INLINE notFollowedBy #-}
 
-instance (Parsing m, MonadPlus m, Monoid w, Show w) => Parsing (Strict.WriterT w m) where
+instance (Parsing m, MonadPlus m, Monoid w) => Parsing (Strict.WriterT w m) where
   try (Strict.WriterT m) = Strict.WriterT $ try m
   {-# INLINE try #-}
   Strict.WriterT m <?> l = Strict.WriterT (m <?> l)
@@ -328,10 +328,10 @@
   eof = lift eof
   {-# INLINE eof #-}
   notFollowedBy (Strict.WriterT m) = Strict.WriterT
-    $ notFollowedBy m >>= \x -> return (x, mempty)
+    $ notFollowedBy (fst <$> m) >>= \x -> return (x, mempty)
   {-# INLINE notFollowedBy #-}
 
-instance (Parsing m, MonadPlus m, Monoid w, Show w) => Parsing (Lazy.WriterT w m) where
+instance (Parsing m, MonadPlus m, Monoid w) => Parsing (Lazy.WriterT w m) where
   try (Lazy.WriterT m) = Lazy.WriterT $ try m
   {-# INLINE try #-}
   Lazy.WriterT m <?> l = Lazy.WriterT (m <?> l)
@@ -341,10 +341,10 @@
   eof = lift eof
   {-# INLINE eof #-}
   notFollowedBy (Lazy.WriterT m) = Lazy.WriterT
-    $ notFollowedBy m >>= \x -> return (x, mempty)
+    $ notFollowedBy (fst <$> m) >>= \x -> return (x, mempty)
   {-# INLINE notFollowedBy #-}
 
-instance (Parsing m, MonadPlus m, Monoid w, Show w, Show s) => Parsing (Lazy.RWST r w s m) where
+instance (Parsing m, MonadPlus m, Monoid w) => Parsing (Lazy.RWST r w s m) where
   try (Lazy.RWST m) = Lazy.RWST $ \r s -> try (m r s)
   {-# INLINE try #-}
   Lazy.RWST m <?> l = Lazy.RWST $ \r s -> m r s <?> l
@@ -354,10 +354,10 @@
   eof = lift eof
   {-# INLINE eof #-}
   notFollowedBy (Lazy.RWST m) = Lazy.RWST
-    $ \r s -> notFollowedBy (m r s) >>= \x -> return (x, s, mempty)
+    $ \r s -> notFollowedBy ((\(a,_,_) -> a) <$> m r s) >>= \x -> return (x, s, mempty)
   {-# INLINE notFollowedBy #-}
 
-instance (Parsing m, MonadPlus m, Monoid w, Show w, Show s) => Parsing (Strict.RWST r w s m) where
+instance (Parsing m, MonadPlus m, Monoid w) => Parsing (Strict.RWST r w s m) where
   try (Strict.RWST m) = Strict.RWST $ \r s -> try (m r s)
   {-# INLINE try #-}
   Strict.RWST m <?> l = Strict.RWST $ \r s -> m r s <?> l
@@ -367,7 +367,7 @@
   eof = lift eof
   {-# INLINE eof #-}
   notFollowedBy (Strict.RWST m) = Strict.RWST
-    $ \r s -> notFollowedBy (m r s) >>= \x -> return (x, s, mempty)
+    $ \r s -> notFollowedBy ((\(a,_,_) -> a) <$> m r s) >>= \x -> return (x, s, mempty)
   {-# INLINE notFollowedBy #-}
 
 instance (Parsing m, Monad m) => Parsing (IdentityT m) where
diff --git a/src/Text/Parser/LookAhead.hs b/src/Text/Parser/LookAhead.hs
--- a/src/Text/Parser/LookAhead.hs
+++ b/src/Text/Parser/LookAhead.hs
@@ -46,11 +46,11 @@
   -- | @lookAhead p@ parses @p@ without consuming any input.
   lookAhead :: m a -> m a
 
-instance (LookAheadParsing m, MonadPlus m, Show s) => LookAheadParsing (Lazy.StateT s m) where
+instance (LookAheadParsing m, MonadPlus m) => LookAheadParsing (Lazy.StateT s m) where
   lookAhead (Lazy.StateT m) = Lazy.StateT $ lookAhead . m
   {-# INLINE lookAhead #-}
 
-instance (LookAheadParsing m, MonadPlus m, Show s) => LookAheadParsing (Strict.StateT s m) where
+instance (LookAheadParsing m, MonadPlus m) => LookAheadParsing (Strict.StateT s m) where
   lookAhead (Strict.StateT m) = Strict.StateT $ lookAhead . m
   {-# INLINE lookAhead #-}
 
@@ -58,19 +58,19 @@
   lookAhead (ReaderT m) = ReaderT $ lookAhead . m
   {-# INLINE lookAhead #-}
 
-instance (LookAheadParsing m, MonadPlus m, Monoid w, Show w) => LookAheadParsing (Strict.WriterT w m) where
+instance (LookAheadParsing m, MonadPlus m, Monoid w) => LookAheadParsing (Strict.WriterT w m) where
   lookAhead (Strict.WriterT m) = Strict.WriterT $ lookAhead m
   {-# INLINE lookAhead #-}
 
-instance (LookAheadParsing m, MonadPlus m, Monoid w, Show w) => LookAheadParsing (Lazy.WriterT w m) where
+instance (LookAheadParsing m, MonadPlus m, Monoid w) => LookAheadParsing (Lazy.WriterT w m) where
   lookAhead (Lazy.WriterT m) = Lazy.WriterT $ lookAhead m
   {-# INLINE lookAhead #-}
 
-instance (LookAheadParsing m, MonadPlus m, Monoid w, Show w, Show s) => LookAheadParsing (Lazy.RWST r w s m) where
+instance (LookAheadParsing m, MonadPlus m, Monoid w) => LookAheadParsing (Lazy.RWST r w s m) where
   lookAhead (Lazy.RWST m) = Lazy.RWST $ \r s -> lookAhead (m r s)
   {-# INLINE lookAhead #-}
 
-instance (LookAheadParsing m, MonadPlus m, Monoid w, Show w, Show s) => LookAheadParsing (Strict.RWST r w s m) where
+instance (LookAheadParsing m, MonadPlus m, Monoid w) => LookAheadParsing (Strict.RWST r w s m) where
   lookAhead (Strict.RWST m) = Strict.RWST $ \r s -> lookAhead (m r s)
   {-# INLINE lookAhead #-}
 
diff --git a/src/Text/Parser/Token.hs b/src/Text/Parser/Token.hs
--- a/src/Text/Parser/Token.hs
+++ b/src/Text/Parser/Token.hs
@@ -344,7 +344,7 @@
   token :: m a -> m a
   token p = p <* (someSpace <|> pure ())
 
-instance (TokenParsing m, MonadPlus m, Show s) => TokenParsing (Lazy.StateT s m) where
+instance (TokenParsing m, MonadPlus m) => TokenParsing (Lazy.StateT s m) where
   nesting (Lazy.StateT m) = Lazy.StateT $ nesting . m
   {-# INLINE nesting #-}
   someSpace = lift someSpace
@@ -354,7 +354,7 @@
   highlight h (Lazy.StateT m) = Lazy.StateT $ highlight h . m
   {-# INLINE highlight #-}
 
-instance (TokenParsing m, MonadPlus m, Show s) => TokenParsing (Strict.StateT s m) where
+instance (TokenParsing m, MonadPlus m) => TokenParsing (Strict.StateT s m) where
   nesting (Strict.StateT m) = Strict.StateT $ nesting . m
   {-# INLINE nesting #-}
   someSpace = lift someSpace
@@ -374,7 +374,7 @@
   highlight h (ReaderT m) = ReaderT $ highlight h . m
   {-# INLINE highlight #-}
 
-instance (TokenParsing m, MonadPlus m, Monoid w, Show w) => TokenParsing (Strict.WriterT w m) where
+instance (TokenParsing m, MonadPlus m, Monoid w) => TokenParsing (Strict.WriterT w m) where
   nesting (Strict.WriterT m) = Strict.WriterT $ nesting m
   {-# INLINE nesting #-}
   someSpace = lift someSpace
@@ -384,7 +384,7 @@
   highlight h (Strict.WriterT m) = Strict.WriterT $ highlight h m
   {-# INLINE highlight #-}
 
-instance (TokenParsing m, MonadPlus m, Monoid w, Show w) => TokenParsing (Lazy.WriterT w m) where
+instance (TokenParsing m, MonadPlus m, Monoid w) => TokenParsing (Lazy.WriterT w m) where
   nesting (Lazy.WriterT m) = Lazy.WriterT $ nesting m
   {-# INLINE nesting #-}
   someSpace = lift someSpace
@@ -394,7 +394,7 @@
   highlight h (Lazy.WriterT m) = Lazy.WriterT $ highlight h m
   {-# INLINE highlight #-}
 
-instance (TokenParsing m, MonadPlus m, Monoid w, Show w, Show s) => TokenParsing (Lazy.RWST r w s m) where
+instance (TokenParsing m, MonadPlus m, Monoid w) => TokenParsing (Lazy.RWST r w s m) where
   nesting (Lazy.RWST m) = Lazy.RWST $ \r s -> nesting (m r s)
   {-# INLINE nesting #-}
   someSpace = lift someSpace
@@ -404,7 +404,7 @@
   highlight h (Lazy.RWST m) = Lazy.RWST $ \r s -> highlight h (m r s)
   {-# INLINE highlight #-}
 
-instance (TokenParsing m, MonadPlus m, Monoid w, Show w, Show s) => TokenParsing (Strict.RWST r w s m) where
+instance (TokenParsing m, MonadPlus m, Monoid w) => TokenParsing (Strict.RWST r w s m) where
   nesting (Strict.RWST m) = Strict.RWST $ \r s -> nesting (m r s)
   {-# INLINE nesting #-}
   someSpace = lift someSpace
diff --git a/tests/QuickCheck.hs b/tests/QuickCheck.hs
--- a/tests/QuickCheck.hs
+++ b/tests/QuickCheck.hs
@@ -24,6 +24,8 @@
 import Text.Parser.Combinators
 import Text.ParserCombinators.ReadP (readP_to_S)
 
+import System.Exit
+
 -- -------------------------------------------------------------------------- --
 -- Run tests with different parser frameworks
 
@@ -50,7 +52,12 @@
 -- Main
 
 main :: IO ()
-main = mapM_ quickCheck tests
+main = mapM quickCheckResult tests >>= \x -> case filter (not . passed) x of
+    [] -> exitSuccess
+    _ -> exitFailure
+  where
+    passed Success{} = True
+    passed _ = False
 
 -- -------------------------------------------------------------------------- --
 -- Tests
