diff --git a/attoparsec-trans.cabal b/attoparsec-trans.cabal
--- a/attoparsec-trans.cabal
+++ b/attoparsec-trans.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                attoparsec-trans
-version:             0.1.0.3
+version:             0.1.1.0
 synopsis:            Interleaved effects for attoparsec parsers
 -- description:         
 homepage:            https://github.com/srijs/haskell-attoparsec-trans
diff --git a/src/Control/Monad/Trans/Parser.hs b/src/Control/Monad/Trans/Parser.hs
--- a/src/Control/Monad/Trans/Parser.hs
+++ b/src/Control/Monad/Trans/Parser.hs
@@ -7,6 +7,9 @@
   , feedM, feedMWith
   , runParserTOnly
   , runParserTWith
+  -- ** Merging transformers
+  , runStateParserT
+  , runWriterParserT
   -- ** Result conversion
   , failResultM
   , zeroResultM
@@ -16,12 +19,14 @@
 
 import Data.Attoparsec.Combinator (feed)
 import Data.Attoparsec.Internal.Types (IResult(..))
-import Data.Monoid (Monoid, mempty, (<>))
+import Data.Monoid (Monoid, mempty, mappend, (<>))
 
 import Control.Applicative (Applicative, pure, (<*>))
 import Control.Monad (MonadPlus, mzero, ap)
 import Control.Monad.IO.Class (MonadIO, liftIO)
 import Control.Monad.Trans.Class (MonadTrans, lift)
+import Control.Monad.Trans.State (StateT, runStateT)
+import Control.Monad.Trans.Writer (WriterT, runWriterT)
 
 -- * Parser Types
 
@@ -87,6 +92,20 @@
 
 runParserTWith :: (Monad m, Monoid i, Eq i) => m i -> ParserT i m r -> ParserT i m r
 runParserTWith mi p = ParserT $ \i -> runParserT p i >>= feedMWith mi
+
+-- * Merging transformers
+
+runStateParserT :: Monad m => ParserT i (StateT r m) () -> r -> ParserT i m r
+runStateParserT p r = ParserT $ \i -> runStateT (runParserT p i) r >>= return . rec
+  where rec (DoneM i (), r')  = DoneM i r'
+        rec (FailM i s, _)    = FailM i s
+        rec (PartialM p', r') = PartialM $ runStateParserT p' r'
+
+runWriterParserT :: (Monad m, Monoid r) => ParserT i (WriterT r m) () -> ParserT i m r
+runWriterParserT p = ParserT $ \i -> runWriterT (runParserT p i) >>= return . rec
+  where rec (DoneM i (), r)  = DoneM i r
+        rec (FailM i s, _)   = FailM i s
+        rec (PartialM p', r) = PartialM . fmap (mappend r) $ runWriterParserT p'
 
 -- * Result Conversion
 
