packages feed

parsec1 1.0.0.3 → 1.0.0.4

raw patch · 2 files changed

+53/−60 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

Text/ParserCombinators/Parsec/Prim.hs view
@@ -3,13 +3,13 @@ -- Module      :  Text.ParserCombinators.Parsec.Prim -- Copyright   :  (c) Daan Leijen 1999-2001 -- License     :  BSD-style (see the file libraries/parsec/LICENSE)--- +-- -- Maintainer  :  Antoine Latter <aslatter@gmail.com> -- Stability   :  provisional -- Portability :  portable -- -- The primitive parser combinators.--- +-- -----------------------------------------------------------------------------  module Text.ParserCombinators.Parsec.Prim@@ -19,7 +19,7 @@                    -- basic types                    , Parser, GenParser                    , runParser, parse, parseFromFile, parseTest-                   +                    -- primitive parsers:                    -- instance Functor Parser     : fmap                    -- instance Monad Parser       : return, >>=, fail@@ -29,14 +29,14 @@                     -- primitive because of space behaviour                    , many, skipMany-                                +                    -- user state manipulation                    , getState, setState, updateState                     -- state manipulation                    , getPosition, setPosition-                   , getInput, setInput                   -                   , State(..), getParserState, setParserState +                   , getInput, setInput+                   , State(..), getParserState, setParserState                  ) where  import Prelude@@ -44,14 +44,6 @@ import Text.ParserCombinators.Parsec.Error import Control.Monad -{-# INLINE parsecMap    #-}-{-# INLINE parsecReturn #-}-{-# INLINE parsecBind   #-}-{-# INLINE parsecZero   #-}-{-# INLINE parsecPlus   #-}-{-# INLINE token        #-}-{-# INLINE tokenPrim    #-}- ----------------------------------------------------------- -- Operators: -- <?>  gives a name to a parser (which is used in error messages)@@ -137,7 +129,7 @@ setPosition pos     = do{ updateParserState (\(State input _ user) -> State input pos user)                         ; return ()                         }-                        + -- | @setInput input@ continues parsing with @input@. setInput :: [tok] -> GenParser tok st () setInput input      = do{ updateParserState (\(State _ pos user) -> State input pos user)@@ -146,7 +138,7 @@  -- | Returns the full parser state as a 'State' record. getParserState	    :: GenParser tok st (State tok st)-getParserState      =  updateParserState id    +getParserState      =  updateParserState id  -- | @setParserState st@ set the full parser state to @st@. setParserState	    :: State tok st -> GenParser tok st (State tok st)@@ -158,7 +150,7 @@ ----------------------------------------------------------- -- Parser definition. -- GenParser tok st a:---  General parser for tokens of type "tok", +--  General parser for tokens of type "tok", --  a user state "st" and a result type "a" ----------------------------------------------------------- type Parser a           = GenParser Char () a@@ -168,7 +160,7 @@  data Consumed a         = Consumed a                --input is consumed                         | Empty !a                  --no input is consumed-                    + data Reply tok st a     = Ok !a !(State tok st) ParseError    --parsing succeeded with "a"                         | Error ParseError                    --parsing failed @@ -229,7 +221,7 @@         Ok x _ _    -> Right x         Error err   -> Left err -parserReply result     +parserReply result     = case result of         Consumed reply -> reply         Empty reply    -> reply@@ -243,7 +235,7 @@  parsecMap :: (a -> b) -> GenParser tok st a -> GenParser tok st b parsecMap f (Parser p)-    = Parser (\state -> +    = Parser (\state ->         case (p state) of           Consumed reply -> Consumed (mapReply reply)           Empty    reply -> Empty    (mapReply reply)@@ -251,28 +243,28 @@     where       mapReply reply         = case reply of-            Ok x state err -> let fx = f x +            Ok x state err -> let fx = f x                               in seq fx (Ok fx state err)             Error err      -> Error err-            + ----------------------------------------------------------- -- Monad: return, sequence (>>=) and fail------------------------------------------------------------    +----------------------------------------------------------- instance Monad (GenParser tok st) where-  return x   = parsecReturn x  +  return x   = parsecReturn x   p >>= f    = parsecBind p f   fail msg   = parsecFail msg  parsecReturn :: a -> GenParser tok st a parsecReturn x-  = Parser (\state -> Empty (Ok x state (unknownError state)))   +  = Parser (\state -> Empty (Ok x state (unknownError state)))  parsecBind :: GenParser tok st a -> (a -> GenParser tok st b) -> GenParser tok st b parsecBind (Parser p) f     = Parser (\state ->-        case (p state) of                 -          Consumed reply1 +        case (p state) of+          Consumed reply1             -> Consumed $                case (reply1) of                  Ok x state1 err1 -> case runP (f x) state1 of@@ -280,13 +272,13 @@                                        Consumed reply2 -> reply2                  Error err1       -> Error err1 -          Empty reply1    +          Empty reply1             -> case (reply1) of                  Ok x state1 err1 -> case runP (f x) state1 of                                        Empty reply2 -> Empty (mergeErrorReply err1 reply2)-                                       other        -> other                                                    +                                       other        -> other                  Error err1       -> Empty (Error err1)-      )                                                              +      )  mergeErrorReply err1 reply   = case reply of@@ -296,7 +288,7 @@  parsecFail :: String -> GenParser tok st a parsecFail msg-  = Parser (\state -> +  = Parser (\state ->       Empty (Error (newErrorMessage (Message msg) (statePos state))))  @@ -306,8 +298,8 @@ instance MonadPlus (GenParser tok st) where   mzero         = parsecZero   mplus p1 p2   = parsecPlus p1 p2-       + pzero :: GenParser tok st a pzero = parsecZero @@ -321,7 +313,7 @@ parsecPlus :: GenParser tok st a -> GenParser tok st a -> GenParser tok st a parsecPlus (Parser p1) (Parser p2)     = Parser (\state ->-        case (p1 state) of        +        case (p1 state) of           Empty (Error err) -> case (p2 state) of                                  Empty reply -> Empty (mergeErrorReply err reply)                                  consumed    -> consumed@@ -329,7 +321,7 @@       )  -{- +{- -- variant that favors a consumed reply over an empty one, even it is not the first alternative.           empty@(Empty reply) -> case reply of                                    Error err ->@@ -376,7 +368,7 @@ -- >  identifier  = many1 letter try :: GenParser tok st a -> GenParser tok st a try (Parser p)-    = Parser (\state@(State input pos user) ->     +    = Parser (\state@(State input pos user) ->         case (p state) of           Consumed (Error err)  -> Empty (Error (setErrorPos pos err))           Consumed ok           -> Consumed ok    -- was: Empty ok@@ -399,7 +391,7 @@ -- >      showTok (pos,t)     = show t -- >      posFromTok (pos,t)  = pos -- >      testTok (pos,t)     = if x == t then Just t else Nothing-token :: (tok -> String) -> (tok -> SourcePos) -> (tok -> Maybe a) -> GenParser tok st a    +token :: (tok -> String) -> (tok -> SourcePos) -> (tok -> Maybe a) -> GenParser tok st a token show tokpos test   = tokenPrim show nextpos test   where@@ -431,47 +423,47 @@ -- error messages using @show@. The position is calculated using @nextpos@, and finally, @mbnextstate@, -- can hold a function that updates the user state on every token recognised (nice to count tokens :-). -- The function is packed into a 'Maybe' type for performance reasons.-tokenPrimEx :: (tok -> String) -> -               (SourcePos -> tok -> [tok] -> SourcePos) -> +tokenPrimEx :: (tok -> String) ->+               (SourcePos -> tok -> [tok] -> SourcePos) ->                Maybe (SourcePos -> tok -> [tok] -> st -> st) ->-               (tok -> Maybe a) -> +               (tok -> Maybe a) ->                GenParser tok st a tokenPrimEx show nextpos mbNextState test     = case mbNextState of-        Nothing -          -> Parser (\state@(State input pos user) -> +        Nothing+          -> Parser (\state@(State input pos user) ->               case input of                 (c:cs) -> case test c of                             Just x  -> let newpos   = nextpos pos c cs                                            newstate = State cs newpos user-                                       in seq newpos $ seq newstate $ +                                       in seq newpos $ seq newstate $                                           Consumed (Ok x newstate (newErrorUnknown newpos))                             Nothing -> Empty (sysUnExpectError (show c) pos)                 []     -> Empty (sysUnExpectError "" pos)              )         Just nextState-          -> Parser (\state@(State input pos user) -> +          -> Parser (\state@(State input pos user) ->               case input of                 (c:cs) -> case test c of                             Just x  -> let newpos   = nextpos pos c cs                                            newuser  = nextState pos c cs user                                            newstate = State cs newpos newuser-                                       in seq newpos $ seq newstate $ +                                       in seq newpos $ seq newstate $                                           Consumed (Ok x newstate (newErrorUnknown newpos))                             Nothing -> Empty (sysUnExpectError (show c) pos)                 []     -> Empty (sysUnExpectError "" pos)              )  -label :: GenParser tok st a -> String -> GenParser tok st a    +label :: GenParser tok st a -> String -> GenParser tok st a label p msg   = labels p [msg]  labels :: GenParser tok st a -> [String] -> GenParser tok st a labels (Parser p) msgs-    = Parser (\state -> +    = Parser (\state ->         case (p state) of-          Empty reply -> Empty $ +          Empty reply -> Empty $                          case (reply) of                            Error err        -> Error (setExpectErrors err msgs)                            Ok x state1 err  | errorIsUnknown err -> reply@@ -482,10 +474,10 @@  -- | @updateParserState f@ applies function @f@ to the parser state. updateParserState :: (State tok st -> State tok st) -> GenParser tok st (State tok st)-updateParserState f +updateParserState f     = Parser (\state -> let newstate = f state                         in Empty (Ok state newstate (unknownError newstate)))-    + -- | The parser @unexpected msg@ always fails with an unexpected error -- message @msg@ without consuming any input. --@@ -496,11 +488,11 @@ unexpected :: String -> GenParser tok st a unexpected msg     = Parser (\state -> Empty (Error (newErrorMessage (UnExpect msg) (statePos state))))-     + setExpectErrors err []         = setErrorMessage (Expect "") err setExpectErrors err [msg]      = setErrorMessage (Expect msg) err-setExpectErrors err (msg:msgs) = foldr (\msg err -> addErrorMessage (Expect msg) err) +setExpectErrors err (msg:msgs) = foldr (\msg err -> addErrorMessage (Expect msg) err)                                        (setErrorMessage (Expect msg) err) msgs  sysUnExpectError msg pos  = Error (newErrorMessage (SysUnExpect msg) pos)@@ -510,7 +502,7 @@ -- Parsers unfolded for space: -- if many and skipMany are not defined as primitives, -- they will overflow the stack on large inputs------------------------------------------------------------    +-----------------------------------------------------------  -- | @many p@ applies the parser @p@ /zero/ or more times. Returns a --    list of the returned values of @p@.@@ -537,7 +529,7 @@  manyAccum :: (a -> [a] -> [a]) -> GenParser tok st a -> GenParser tok st [a] manyAccum accum (Parser p)-  = Parser (\state -> +  = Parser (\state ->     let walk xs state r = case r of                            Empty (Error err)          -> Ok xs state err                            Empty ok                   -> error "Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string."@@ -553,16 +545,16 @@   -------------------------------------------------------------- Parsers unfolded for speed: +-- Parsers unfolded for speed: --  tokens------------------------------------------------------------    +-----------------------------------------------------------  {- specification of @tokens@: tokens showss nextposs s   = scan s   where     scan []       = return s-    scan (c:cs)   = do{ token show nextpos c <?> shows s; scan cs }                      +    scan (c:cs)   = do{ token show nextpos c <?> shows s; scan cs }      show c        = shows [c]     nextpos pos c = nextposs pos [c]@@ -570,13 +562,13 @@  tokens :: Eq tok => ([tok] -> String) -> (SourcePos -> [tok] -> SourcePos) -> [tok] -> GenParser tok st [tok] tokens shows nextposs s-    = Parser (\state@(State input pos user) -> +    = Parser (\state@(State input pos user) ->        let         ok cs             = let newpos   = nextposs pos s                                 newstate = State cs newpos user-                            in seq newpos $ seq newstate $ +                            in seq newpos $ seq newstate $                                (Ok s newstate (newErrorUnknown newpos))-                               +         errEof            = Error (setErrorMessage (Expect (shows s))                                      (newErrorMessage (SysUnExpect "") pos))         errExpect c       = Error (setErrorMessage (Expect (shows s))
parsec1.cabal view
@@ -1,6 +1,6 @@ cabal-version: >= 1.2 name:           parsec1-version:        1.0.0.3+version:        1.0.0.4 license:        BSD3 license-file:   LICENSE author:         Daan Leijen <daan@cs.uu.nl>@@ -27,6 +27,7 @@     Your own module ambiguities are best avoided by hiding packages.     .     This version only differs from pervious ones by a changed description.+    (In version 1.0.0.4 only the inline pragmas have been removed #4849.) build-type:     Simple cabal-version:      >= 1.6 library {