module Text.ParserCombinators.Poly.Plain
(
Parser(P)
, Result(..)
, runParser
, next
, eof
, satisfy
, onFail
, reparse
, module Text.ParserCombinators.Poly.Base
, module Control.Applicative
) where
import Text.ParserCombinators.Poly.Base
import Text.ParserCombinators.Poly.Result
import Text.ParserCombinators.Poly.Parser
import Control.Applicative
runParser :: Parser t a -> [t] -> (Either String a, [t])
runParser (P p) = resultToEither . p
instance Applicative (Parser t) where
pure f = return f
pf <*> px = do { f <- pf; x <- px; return (f x) }
#if defined(GLASGOW_HASKELL) && GLASGOW_HASKELL > 610
p <* q = p `discard` q
#endif
instance Alternative (Parser t) where
empty = fail "no parse"
p <|> q = p `onFail` q
instance PolyParse (Parser t)