diff options
| author | Matthew Pickering <matthewtpickering@gmail.com> | 2014-07-20 17:04:18 +0100 | 
|---|---|---|
| committer | Matthew Pickering <matthewtpickering@gmail.com> | 2014-07-22 15:13:54 +0100 | 
| commit | e045b1d5f2e5da8ac3be9d01bbe7ae5979535c51 (patch) | |
| tree | af80181e45ed6b80a08e29af4951b62bc1689310 | |
| parent | 5debb492ef64767677d893e2cf77a100d57796e0 (diff) | |
| download | pandoc-e045b1d5f2e5da8ac3be9d01bbe7ae5979535c51.tar.gz | |
Generalised readWith to readWithM
| -rw-r--r-- | src/Text/Pandoc/Parsing.hs | 29 | 
1 files changed, 19 insertions, 10 deletions
| diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs index f4f9178d0..27850862c 100644 --- a/src/Text/Pandoc/Parsing.hs +++ b/src/Text/Pandoc/Parsing.hs @@ -64,6 +64,7 @@ module Text.Pandoc.Parsing ( anyLine,                               widthsFromIndices,                               gridTableWith,                               readWith, +                             readWithM,                               testStringWith,                               guardEnabled,                               guardDisabled, @@ -825,15 +826,16 @@ gridTableFooter = blanklines  --- --- | Parse a string with a given parser and state. -readWith :: (Stream [Char] Identity Char) -         => ParserT [Char] st Identity a   -- ^ parser -         -> st                             -- ^ initial state -         -> [Char]                         -- ^ input -         -> a -readWith parser state input = -    case runParser parser state "source" input of -      Left err'    -> +-- | Removes the ParsecT layer from the monad transformer stack +readWithM :: (Monad m, Functor m) +          => ParserT [Char] st m a       -- ^ parser +          -> st                       -- ^ initial state +          -> String                   -- ^ input +          -> m a +readWithM parser state input = +    handleError <$> (runParserT parser state "source" input) +    where +      handleError (Left err') =          let errPos = errorPos err'              errLine = sourceLine errPos              errColumn = sourceColumn errPos @@ -841,7 +843,14 @@ readWith parser state input =          in  error $ "\nError at " ++ show  err' ++ "\n" ++                  theline ++ "\n" ++ replicate (errColumn - 1) ' ' ++                  "^" -      Right result -> result +      handleError (Right result) = result + +-- | Parse a string with a given parser and state +readWith :: Parser [Char] st a +         -> st +         -> String +         -> a +readWith p t inp = runIdentity $ readWithM p t inp  -- | Parse a string with @parser@ (for testing).  testStringWith :: (Show a, Stream [Char] Identity Char) | 
