Added Control.Applicative.Alternative instance

This commit is contained in:
Derek Elkins 2008-01-19 22:06:33 +00:00
parent 4cc1a98ba9
commit 4de1647cc5

View File

@ -16,15 +16,18 @@
module Text.Parsec.Prim where module Text.Parsec.Prim where
import Control.Applicative import qualified Control.Applicative as Applicative ( Applicative(..), Alternative(..) )
import Control.Monad import Control.Monad
import Control.Monad.Trans import Control.Monad.Trans
import Control.Monad.Identity import Control.Monad.Identity
import Text.Parsec.Pos import Text.Parsec.Pos
import Text.Parsec.Error import Text.Parsec.Error
unknownError state = newErrorUnknown (statePos state) unknownError state = newErrorUnknown (statePos state)
sysUnExpectError msg pos = Error (newErrorMessage (SysUnExpect msg) pos) sysUnExpectError msg pos = Error (newErrorMessage (SysUnExpect msg) pos)
unexpected :: (Stream s m t) => String -> ParsecT s u m a unexpected :: (Stream s m t) => String -> ParsecT s u m a
unexpected msg unexpected msg
= ParsecT $ \s -> return $ Empty $ return $ = ParsecT $ \s -> return $ Empty $ return $
@ -65,9 +68,13 @@ parsecMap :: (Monad m) => (a -> b) -> ParsecT s u m a -> ParsecT s u m b
parsecMap f p parsecMap f p
= ParsecT $ \s -> liftM (fmap (liftM (fmap f))) (runParsecT p s) = ParsecT $ \s -> liftM (fmap (liftM (fmap f))) (runParsecT p s)
instance (Monad m) => Applicative (ParsecT s u m) where instance (Monad m) => Applicative.Applicative (ParsecT s u m) where
pure = return pure = return
(<*>) = ap (<*>) = ap -- TODO: Can this be optimized?
instance (Monad m) => Applicative.Alternative (ParsecT s u m) where
empty = mzero
(<|>) = mplus
instance (Monad m) => Monad (ParsecT s u m) where instance (Monad m) => Monad (ParsecT s u m) where
return x = parserReturn x return x = parserReturn x
@ -438,5 +445,6 @@ modifyState f = do updateParserState $ \s -> s { stateUser = f (stateUser s) }
setState :: (Monad m) => u -> ParsecT s u m () setState :: (Monad m) => u -> ParsecT s u m ()
setState = putState setState = putState
updateState :: (Monad m) => (u -> u) -> ParsecT s u m () updateState :: (Monad m) => (u -> u) -> ParsecT s u m ()
updateState = modifyState updateState = modifyState