uu-cco-uu-parsinglib-0.1.0.0: src/CCO/Parsing/UUParsingLib.hs
-------------------------------------------------------------------------------
-- |
-- Module : CCO.Parsing.UU
-- Copyright : (c) 2008 Utrecht University
-- License : All rights reserved
--
-- Maintainer : stefan@cs.uu.nl
-- Stability : provisional
-- Portability : portable
--
-- Utility for executing 'Parser's from the uu-parsinglib package
-- within the 'Feedback' monad.
--
-- This module can be regarded a satellite to the utility library accompanying
-- the course on Compiler Construction (INFOMCCO) at Utrecht University.
--
-------------------------------------------------------------------------------
module CCO.Parsing.UUParsingLib (
-- * Executing parsers within the Feedback monad
parseFeedback
) where
import Text.ParserCombinators.UU
import Text.ParserCombinators.UU.BasicInstances
import Text.ParserCombinators.UU.Utils
import CCO.Feedback
import qualified Data.ListLike as LL
-------------------------------------------------------------------------------
-- Executing parsers within the Feedback monad
-------------------------------------------------------------------------------
-- | Executes a 'Parser' within the 'Feedback' monad.
parseFeedback
:: (LL.ListLike [s] Char)
=> Parser a -- ^ the parser to use
-> [s] -- ^ the input
-> Feedback a -- ^ return result in Feedback
parseFeedback p inp = do
let r@(a, errors) = parse ( (,) <$> p <*> pEnd) (createStr (LineColPos 0 0 0) inp)
if null errors then return ()
else do sequence $ map (warn_ . show) errors
return ()
return a