packages feed

attoparsec 0.13.2.2 → 0.13.2.3

raw patch · 9 files changed

+53/−28 lines, 9 filesdep ~QuickCheckdep ~basedep ~semigroupsPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: QuickCheck, base, semigroups, transformers

API changes (from Hackage documentation)

- Data.Attoparsec.ByteString.Char8: instance (a ~ Data.ByteString.Internal.ByteString) => Data.String.IsString (Data.Attoparsec.ByteString.Internal.Parser a)
+ Data.Attoparsec.ByteString.Char8: instance (a Data.Type.Equality.~ Data.ByteString.Internal.ByteString) => Data.String.IsString (Data.Attoparsec.ByteString.Internal.Parser a)
- Data.Attoparsec.ByteString: eitherP :: (Alternative f) => f a -> f b -> f (Either a b)
+ Data.Attoparsec.ByteString: eitherP :: Alternative f => f a -> f b -> f (Either a b)
- Data.Attoparsec.ByteString: many' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.ByteString: many' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.ByteString: many1' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.ByteString: many1' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.ByteString: manyTill' :: (MonadPlus m) => m a -> m b -> m [a]
+ Data.Attoparsec.ByteString: manyTill' :: MonadPlus m => m a -> m b -> m [a]
- Data.Attoparsec.ByteString: parseTest :: (Show a) => Parser a -> ByteString -> IO ()
+ Data.Attoparsec.ByteString: parseTest :: Show a => Parser a -> ByteString -> IO ()
- Data.Attoparsec.ByteString: parseWith :: Monad m => (m ByteString) -> Parser a -> ByteString -> m (Result a)
+ Data.Attoparsec.ByteString: parseWith :: Monad m => m ByteString -> Parser a -> ByteString -> m (Result a)
- Data.Attoparsec.ByteString: sepBy' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.ByteString: sepBy' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.ByteString: sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.ByteString: sepBy1' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.ByteString.Char8: eitherP :: (Alternative f) => f a -> f b -> f (Either a b)
+ Data.Attoparsec.ByteString.Char8: eitherP :: Alternative f => f a -> f b -> f (Either a b)
- Data.Attoparsec.ByteString.Char8: many' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.ByteString.Char8: many' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.ByteString.Char8: many1' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.ByteString.Char8: many1' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.ByteString.Char8: manyTill' :: (MonadPlus m) => m a -> m b -> m [a]
+ Data.Attoparsec.ByteString.Char8: manyTill' :: MonadPlus m => m a -> m b -> m [a]
- Data.Attoparsec.ByteString.Char8: parseTest :: (Show a) => Parser a -> ByteString -> IO ()
+ Data.Attoparsec.ByteString.Char8: parseTest :: Show a => Parser a -> ByteString -> IO ()
- Data.Attoparsec.ByteString.Char8: parseWith :: Monad m => (m ByteString) -> Parser a -> ByteString -> m (Result a)
+ Data.Attoparsec.ByteString.Char8: parseWith :: Monad m => m ByteString -> Parser a -> ByteString -> m (Result a)
- Data.Attoparsec.ByteString.Char8: sepBy' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.ByteString.Char8: sepBy' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.ByteString.Char8: sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.ByteString.Char8: sepBy1' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.ByteString.Lazy: eitherP :: (Alternative f) => f a -> f b -> f (Either a b)
+ Data.Attoparsec.ByteString.Lazy: eitherP :: Alternative f => f a -> f b -> f (Either a b)
- Data.Attoparsec.ByteString.Lazy: many' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.ByteString.Lazy: many' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.ByteString.Lazy: many1' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.ByteString.Lazy: many1' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.ByteString.Lazy: manyTill' :: (MonadPlus m) => m a -> m b -> m [a]
+ Data.Attoparsec.ByteString.Lazy: manyTill' :: MonadPlus m => m a -> m b -> m [a]
- Data.Attoparsec.ByteString.Lazy: parseTest :: (Show a) => Parser a -> ByteString -> IO ()
+ Data.Attoparsec.ByteString.Lazy: parseTest :: Show a => Parser a -> ByteString -> IO ()
- Data.Attoparsec.ByteString.Lazy: sepBy' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.ByteString.Lazy: sepBy' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.ByteString.Lazy: sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.ByteString.Lazy: sepBy1' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.Combinator: eitherP :: (Alternative f) => f a -> f b -> f (Either a b)
+ Data.Attoparsec.Combinator: eitherP :: Alternative f => f a -> f b -> f (Either a b)
- Data.Attoparsec.Combinator: many' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.Combinator: many' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.Combinator: many1' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.Combinator: many1' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.Combinator: manyTill' :: (MonadPlus m) => m a -> m b -> m [a]
+ Data.Attoparsec.Combinator: manyTill' :: MonadPlus m => m a -> m b -> m [a]
- Data.Attoparsec.Combinator: sepBy' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.Combinator: sepBy' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.Combinator: sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.Combinator: sepBy1' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.Internal.Types: Parser :: forall r. State i -> Pos -> More -> Failure i (State i) r -> Success i (State i) a r -> IResult i r -> Parser i a
+ Data.Attoparsec.Internal.Types: Parser :: (forall r. State i -> Pos -> More -> Failure i (State i) r -> Success i (State i) a r -> IResult i r) -> Parser i a
- Data.Attoparsec.Text: eitherP :: (Alternative f) => f a -> f b -> f (Either a b)
+ Data.Attoparsec.Text: eitherP :: Alternative f => f a -> f b -> f (Either a b)
- Data.Attoparsec.Text: many' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.Text: many' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.Text: many1' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.Text: many1' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.Text: manyTill' :: (MonadPlus m) => m a -> m b -> m [a]
+ Data.Attoparsec.Text: manyTill' :: MonadPlus m => m a -> m b -> m [a]
- Data.Attoparsec.Text: parseTest :: (Show a) => Parser a -> Text -> IO ()
+ Data.Attoparsec.Text: parseTest :: Show a => Parser a -> Text -> IO ()
- Data.Attoparsec.Text: parseWith :: Monad m => (m Text) -> Parser a -> Text -> m (Result a)
+ Data.Attoparsec.Text: parseWith :: Monad m => m Text -> Parser a -> Text -> m (Result a)
- Data.Attoparsec.Text: sepBy' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.Text: sepBy' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.Text: sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.Text: sepBy1' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.Text.Lazy: eitherP :: (Alternative f) => f a -> f b -> f (Either a b)
+ Data.Attoparsec.Text.Lazy: eitherP :: Alternative f => f a -> f b -> f (Either a b)
- Data.Attoparsec.Text.Lazy: many' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.Text.Lazy: many' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.Text.Lazy: many1' :: (MonadPlus m) => m a -> m [a]
+ Data.Attoparsec.Text.Lazy: many1' :: MonadPlus m => m a -> m [a]
- Data.Attoparsec.Text.Lazy: manyTill' :: (MonadPlus m) => m a -> m b -> m [a]
+ Data.Attoparsec.Text.Lazy: manyTill' :: MonadPlus m => m a -> m b -> m [a]
- Data.Attoparsec.Text.Lazy: parseTest :: (Show a) => Parser a -> Text -> IO ()
+ Data.Attoparsec.Text.Lazy: parseTest :: Show a => Parser a -> Text -> IO ()
- Data.Attoparsec.Text.Lazy: sepBy' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.Text.Lazy: sepBy' :: MonadPlus m => m a -> m s -> m [a]
- Data.Attoparsec.Text.Lazy: sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]
+ Data.Attoparsec.Text.Lazy: sepBy1' :: MonadPlus m => m a -> m s -> m [a]

Files

Data/Attoparsec/Internal/Types.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving, OverloadedStrings,+{-# LANGUAGE CPP, BangPatterns, GeneralizedNewtypeDeriving, OverloadedStrings,     Rank2Types, RecordWildCards, TypeFamilies #-} -- | -- Module      :  Data.Attoparsec.Internal.Types@@ -39,7 +39,7 @@ import Data.Text (Text) import qualified Data.Text as Text import Data.Text.Unsafe (Iter(..))-import Prelude hiding (getChar, succ)+import Prelude hiding (succ) import qualified Data.Attoparsec.ByteString.Buffer as B import qualified Data.Attoparsec.Text.Buffer as T @@ -136,8 +136,10 @@     mempty  = Incomplete  instance Monad (Parser i) where+#if !(MIN_VERSION_base(4,13,0))     fail = Fail.fail     {-# INLINE fail #-}+#endif      return = App.pure     {-# INLINE return #-}@@ -207,8 +209,9 @@     {-# INLINE (<|>) #-}      many v = many_v-        where many_v = some_v <|> pure []-              some_v = (:) App.<$> v <*> many_v+      where+        many_v = some_v <|> pure []+        some_v = (:) <$> v <*> many_v     {-# INLINE many #-}      some v = some_v
Data/Attoparsec/Zepto.hs view
@@ -92,8 +92,10 @@         Fail err -> return (Fail err)     {-# INLINE (>>=) #-} +#if !(MIN_VERSION_base(4,13,0))     fail = Fail.fail     {-# INLINE fail #-}+#endif  instance Monad m => Fail.MonadFail (ZeptoT m) where     fail msg = Parser $ \_ -> return (Fail msg)
attoparsec.cabal view
@@ -1,12 +1,12 @@ name:            attoparsec-version:         0.13.2.2+version:         0.13.2.3 license:         BSD3 license-file:    LICENSE category:        Text, Parsing author:          Bryan O'Sullivan <bos@serpentine.com> maintainer:      Bryan O'Sullivan <bos@serpentine.com>, Ben Gamari <ben@smart-cactus.org> stability:       experimental-tested-with:     GHC == 7.0.4, GHC == 7.2.2, GHC == 7.4.2, GHC ==7.6.3, GHC ==7.8.4, GHC ==7.10.3, GHC ==8.0.2, GHC ==8.2.2+tested-with:     GHC == 7.0.4, GHC == 7.2.2, GHC == 7.4.2, GHC ==7.6.3, GHC ==7.8.4, GHC ==7.10.3, GHC ==8.0.2, GHC ==8.2.2, GHC==8.4.4, GHC==8.6.5, GHC==8.8.1 synopsis:        Fast combinator parsing for bytestrings and text cabal-version:   >= 1.8 homepage:        https://github.com/bos/attoparsec@@ -39,7 +39,7 @@  library   build-depends: array,-                 base >= 4.2 && < 5,+                 base >= 4.3 && < 5,                  bytestring,                  containers,                  deepseq,@@ -124,10 +124,10 @@    build-depends:     array,-    base >= 4 && < 5,+    base,     bytestring,     deepseq >= 1.1,-    QuickCheck >= 2.7 && < 2.10,+    QuickCheck >= 2.13.2 && < 2.14,     quickcheck-unicode,     scientific,     tasty >= 0.11,
benchmarks/HeadersByteString.hs view
@@ -9,6 +9,15 @@ import qualified Data.Attoparsec.ByteString.Lazy as BL import qualified Data.ByteString.Char8 as B +-- Note: In the benchmarks for parsing an http request+-- from a strict bytestring, we consider warp's implementation,+-- which has highly optimized code for handling the first+-- line in particular. It's treatment of the headers+-- is more relaxed from the treatment they are given by the+-- attoparsec parser benchmarked here. Consequently, it+-- is should not be possible to match its performance since+-- it accepts header names with disallowed characters.+ headers :: IO Benchmark headers = do   req <- B.readFile =<< pathTo "http-request.txt"@@ -18,7 +27,7 @@   return $ bgroup "headers" [       bgroup "B" [         bench "request" $ nf (B.parseOnly request) req-      , bench "warp" $ nfIO (parseHeaderLines [req])+      , bench "warp" $ nfIO (parseHeaderLines (B.split '\n' req))       , bench "response" $ nf (B.parseOnly response) resp       ]     , bgroup "BL" [
benchmarks/HeadersByteString/Atto.hs view
@@ -15,8 +15,16 @@ instance NFData HttpVersion where     rnf !_ = () +isHeaderChar :: Char -> Bool+isHeaderChar c =+  (c >= 'a' && c <= 'z') ||+  (c >= 'A' && c <= 'Z') ||+  (c >= '0' && c <= '9') ||+  (c == '_') ||+  (c == '-')+ header = do-  name <- B.takeWhile1 (B.inClass "a-zA-Z0-9_-") <* B.char ':' <* B.skipSpace+  name <- B.takeWhile1 isHeaderChar <* B.char ':' <* B.skipSpace   body <- bodyLine   return (name, body) 
benchmarks/http-request.txt view
@@ -1,14 +1,9 @@ GET / HTTP/1.1 Host: twitter.com-Accept: text/html, application/xhtml+xml, application/xml; q=0.9,-	image/webp, */*; q=0.8+Accept: text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, */*; q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Cache-Control: max-age=0-Cookie: guest_id=v1%3A139; _twitter_sess=BAh7CSIKZmxhc2hJQz-e1e1;-	__utma=43838368.452555194.1399611824.1; __utmb=43838368;-	__utmc=43838368; __utmz=1399611824.1.1.utmcsr=(direct)|utmcmd=(none)-User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5)-	AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.86-	Safari/537.36+Cookie: guest_id=v1%3A139; _twitter_sess=BAh7CSIKZmxhc2hJQz-e1e1; __utma=43838368.452555194.1399611824.1; __utmb=43838368; __utmc=43838368; __utmz=1399611824.1.1.utmcsr=(direct)|utmcmd=(none)+User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.86 Safari/537.36 
benchmarks/http-response.txt view
@@ -3,10 +3,8 @@ Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1-Set-Cookie: PREF=ID=1a871afc4240db5e:FF:LM=1399609497:S=e5MZ0itEekjVwNcU;-	expires=Sun, 08-May-2016 04:24:57 GMT; path=/; domain=.google.com-Set-Cookie: NID=67=-WlfaDG6VSEPk7abAjrK98HBSoCD2ID6JKkUR95tEumzDmg7Fc8pSQ8;-	expires=Sat, 08-Nov-2014 04:24:57 GMT; path=/; domain=.google.com; HttpOnly+Set-Cookie: PREF=ID=1a871afc4240db5e:FF:LM=1399609497:S=e5MZ0itEekjVwNcU; expires=Sun, 08-May-2016 04:24:57 GMT; path=/; domain=.google.com+Set-Cookie: NID=67=-WlfaDG6VSEPk7abAjrK98HBSoCD2ID6JKkUR95tEumzDmg7Fc8pSQ8; expires=Sat, 08-Nov-2014 04:24:57 GMT; path=/; domain=.google.com; HttpOnly P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." Server: gws X-XSS-Protection: 1; mode=block
tests/QC/ByteString.hs view
@@ -26,9 +26,11 @@ satisfy :: Word8 -> L.ByteString -> Property satisfy w s = parseBS (P.satisfy (<=w)) (L.cons w s) === Just w -satisfyWith :: Char -> L.ByteString -> Property-satisfyWith c s = parseBS (P.satisfyWith (chr . fromIntegral) (<=c))+satisfyWith :: Word8 -> L.ByteString -> Property+satisfyWith w s = parseBS (P.satisfyWith (chr . fromIntegral) (<=c))                          (L.cons (fromIntegral (ord c)) s) === Just c+  where+    c = chr (fromIntegral w)  word8 :: Word8 -> L.ByteString -> Property word8 w s = parseBS (P.word8 w) (L.cons w s) === Just w
tests/QC/Text.hs view
@@ -6,6 +6,7 @@ import Control.Applicative ((<*>), (<$>)) #endif import Data.Int (Int64)+import Data.Word (Word8) import Prelude hiding (take, takeWhile) import QC.Common (liftOp, parseT) import qualified QC.Text.FastSet as FastSet@@ -16,8 +17,10 @@ import qualified Data.Attoparsec.Text as P import qualified Data.Attoparsec.Text.Lazy as PL import qualified Data.Attoparsec.Text.FastSet as S+import qualified Data.ByteString as BS import qualified Data.Char as Char import qualified Data.Text as T+import qualified Data.Text.Encoding as TE import qualified Data.Text.Lazy as L  -- Basic byte-level combinators.@@ -70,9 +73,12 @@     === Just t'   where t' = toStrict t -stringCI :: T.Text -> Property-stringCI s = P.parseOnly (P.stringCI fs) s === Right s+-- | Note: "simple, and efficient" works for well formed input...+-- i.e. e.g. Latin1 texts+stringCI :: [Word8] -> Property+stringCI ws = P.parseOnly (P.stringCI fs) s === Right s   where fs = T.toCaseFold s+        s  = TE.decodeLatin1 (BS.pack ws)  asciiCI :: T.Text -> Gen Bool asciiCI x =@@ -150,7 +156,9 @@                      (c, fst <$> L.uncons s') === ('\r', Just '\n')  scan :: L.Text -> Positive Int64 -> Property-scan s (Positive k) = parseT p s === Just (toStrict $ L.take k s)+-- for some reason, if counterexample is removed, this test fails?+scan s (Positive k) = counterexample (show s)+                    $ parseT p s === Just (toStrict $ L.take k s)   where p = P.scan k $ \ n _ ->             if n > 0 then let !n' = n - 1 in Just n' else Nothing