attoparsec-trans 0.1.0.3 → 0.1.1.0
raw patch · 2 files changed
+21/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Monad.Trans.Parser: runStateParserT :: Monad m => ParserT i (StateT r m) () -> r -> ParserT i m r
+ Control.Monad.Trans.Parser: runWriterParserT :: (Monad m, Monoid r) => ParserT i (WriterT r m) () -> ParserT i m r
Files
attoparsec-trans.cabal view
@@ -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
src/Control/Monad/Trans/Parser.hs view
@@ -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