module ParsOps3(module ParsOps3,(<$>),(<*>),(<*),(*>),(<|>)) where import Control.Applicative import LLParsOps --import Trace --infixl 4 `ap`,`cap`,`apCut`,`chk` --infixl 3 `orelse` --infix 3 `err` parse p = parseDP p parseToEof p is = case parseDP p is of (Just x,[],es) -> Right x -- warnings are discarded (_,_,es) -> --trace (show es) $ Left (head [(is,fs)|(is,fs,Nothing)<-es]) --ap x = seqDP x --apCut x= ap x --p1 `chk` p2 = const `mapP` p1 `ap` p2 --p1 `cap` p2 = const id `mapP` p1 `ap` p2 --orelse x = altDP x --unit x = emptyDP x --empty x = emptyDP x --err = errDP tok x = symbolDP x oneOf x = anySymbolDP x --mapP f p = pure f <*> p many x = fst . manysome $ x some x = snd . manysome $ x manysome p = (many,some) where many = some <|> pure [] some = (:) <$> p' <*> many p' = nonEmptyDP "some or many" p optional x p = p <|> pure x maybeP p = Just <$> p <|> pure Nothing