packages feed

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