packages feed

binary-parsers 0.2.0.0 → 0.2.1.0

raw patch · 7 files changed

+463/−313 lines, 7 filesdep +scannerPVP ok

version bump matches the API change (PVP)

Dependencies added: scanner

API changes (from Hackage documentation)

+ Data.Binary.Parser: infix 0 <?>
+ Data.Binary.Parser: parse :: Get a -> ByteString -> Decoder a
+ Data.Binary.Parser: parseDetail :: Get a -> ByteString -> Either (ByteString, ByteOffset, String) (ByteString, ByteOffset, a)
+ Data.Binary.Parser: parseDetailLazy :: Get a -> ByteString -> Either (ByteString, ByteOffset, String) (ByteString, ByteOffset, a)

Files

ChangeLog.md view
@@ -1,5 +1,11 @@ # Revision history for binary-parsec +## 0.2.1.0  -- 2016-09-21++* Add `parse`,`parseDetail`, `parseDetailLazy`.+* Reduce these running functions' overhead so that binary performs well on small getters now.+* Add scanner to benchmarks.+ ## 0.2.0.0  -- 2016-09-21  * Add `endOfLine` combinator.
Data/Binary/Parser.hs view
@@ -37,14 +37,21 @@ -- @ -- -- For fast byte set operations, please use <http://hackage.haskell.org/package/charset charset>--- package. If there's anything missing from this package please report!+-- package. --+-- It's recommanded to use 'parseOnly', 'parseDetail'... functions to run your parsers since these+-- functions are faster than binary's counter part by avoiding a small constant overhead.+-- Check 'parse' for detail.+-- module Data.Binary.Parser     (     -- * Running parsers       Parser     , parseOnly     , parseLazy+    , parseDetail+    , parseDetailLazy+    , parse     -- * Combinators     , (<?>)     , endOfInput@@ -70,10 +77,12 @@ import           Control.Applicative import           Control.Monad import           Data.Binary.Get+import qualified Data.Binary.Get.Internal   as I import           Data.Binary.Parser.Numeric import           Data.Binary.Parser.Word8 import qualified Data.ByteString            as B import qualified Data.ByteString.Lazy       as L+import qualified Data.ByteString.Lazy.Internal as L (ByteString(..))  -------------------------------------------------------------------------------- @@ -90,24 +99,96 @@ -- parseOnly :: Get a -> B.ByteString -> Either String a parseOnly g bs =-    let d = runGetIncremental g-    in case pushEndOfInput (pushChunk d bs) of+    case pushEndOfInput (parse g bs) of         Fail _ _ err -> Left err         Done _ _ a -> Right a-        _ -> Left "parseOnly: impossible error!"+        _ -> error "parseOnly: impossible error!" {-# INLINE parseOnly #-}   -- | Similar to 'parseOnly', but run a parser on lazy 'L.ByteString'. -- parseLazy :: Get a -> L.ByteString -> Either String a-parseLazy g lbs =-    let d = runGetIncremental g-    in case pushEndOfInput (pushChunks d lbs) of+parseLazy g (L.Chunk bs lbs) =+    case pushEndOfInput (pushChunks (parse g bs) lbs) of         Fail _ _ err -> Left err         Done _ _ a -> Right a-        _ -> Left "parseOnly: impossible error!"+        _ -> error "parseOnly: impossible error!"+parseLazy g L.Empty =+    case pushEndOfInput (parse g B.empty) of+        Fail _ _ err -> Left err+        Done _ _ a -> Right a+        _ -> error "parseOnly: impossible error!" {-# INLINE parseLazy #-}++-- | Run a parser on 'B.ByteString'.+--+-- This function return full parsing results: the rest of input, stop offest and fail+-- message or parsing result.+--+-- /Since: 0.2.1.0/+--+parseDetail :: Get a+            -> B.ByteString+            -> Either (B.ByteString, ByteOffset, String) (B.ByteString, ByteOffset, a)+parseDetail g bs =+    case pushEndOfInput (parse g bs) of+        Fail rest offset err -> Left (rest, offset, err)+        Done rest offset a   -> Right (rest, offset, a)+        _ -> error "parseOnly: impossible error!"+{-# INLINE parseDetail #-}++-- | Similar to 'parseDetail', but run a parser on lazy 'L.ByteString'.+--+-- /Since: 0.2.1.0/+--+parseDetailLazy :: Get a+                -> L.ByteString+                -> Either (B.ByteString, ByteOffset, String) (B.ByteString, ByteOffset, a)+parseDetailLazy g (L.Chunk bs lbs) =+    case pushEndOfInput (pushChunks (parse g bs) lbs) of+        Fail rest offset err -> Left (rest, offset, err)+        Done rest offset a   -> Right (rest, offset, a)+        _ -> error "parseOnly: impossible error!"+parseDetailLazy g L.Empty =+    case pushEndOfInput (parse g B.empty) of+        Fail rest offset err -> Left (rest, offset, err)+        Done rest offset a   -> Right (rest, offset, a)+        _ -> error "parseOnly: impossible error!"+{-# INLINE parseDetailLazy #-}++-- | Run a 'Get' monad. See 'Decoder' for what to do next, like providing+-- input, handling decoding errors and to get the output value.+--+-- This's faster than 'runGetIncremental' becuase it provides an initial chunk rather+-- than feeding 'B.empty' and waiting for chunks, this overhead is noticeable when you're+-- running small getters over short 'ByteString' s.+--+-- /Since: 0.2.1.0/+--+parse :: Get a -> B.ByteString -> Decoder a+parse g bs = calculateOffset (loop (I.runCont g bs I.Done)) (fromIntegral $ B.length bs)+  where+    calculateOffset r !acc = case r of+        I.Done inp a -> Done inp (acc - fromIntegral (B.length inp)) a+        I.Fail inp s -> Fail inp (acc - fromIntegral (B.length inp)) s+        I.Partial k -> Partial $ \ms -> case ms of+                Nothing -> calculateOffset (k Nothing) acc+                Just i -> calculateOffset (k ms) (acc + fromIntegral (B.length i))+        I.BytesRead unused k -> calculateOffset (k $! (acc - unused)) acc++    loop r = case r of+        I.Partial k -> I.Partial $ \ms -> case ms of Just _ -> loop (k ms)+                                                     Nothing -> completeLoop (k ms)+        I.BytesRead n k -> I.BytesRead n (loop . k)+        I.Done _ _ -> r+        I.Fail _ _ -> r++    completeLoop r = case r of+        I.Partial k -> completeLoop (k Nothing)+        I.BytesRead n k -> I.BytesRead n (completeLoop . k)+        I.Fail _ _ -> r+        I.Done _ _ -> r  -------------------------------------------------------------------------------- 
Data/Binary/Parser/Word8.hs view
@@ -214,11 +214,17 @@ string :: ByteString -> Get () string bs = do     let l = B.length bs-    ensureN l     bs' <- get-    if B.unsafeTake l bs' == bs-    then put (B.unsafeDrop l bs')-    else fail ("string not match: " ++ show bs)+    if l <= B.length bs'              -- current chunk is enough+    then if B.unsafeTake l bs' == bs+        then put (B.unsafeDrop l bs')+        else fail "string"+    else do+        ensureN l+        bs'' <- get+        if B.unsafeTake l bs'' == bs+        then put (B.unsafeDrop l bs'')+        else fail "string" {-# INLINE string #-}  -- | A stateful scanner.  The predicate consumes and transforms a
README.md view
@@ -32,446 +32,455 @@ ---------  ```+start benchmark http request parser benchmarking http-req/attoparsec-time                 2.240 μs   (2.216 μs .. 2.264 μs)-                     0.998 R²   (0.996 R² .. 0.999 R²)-mean                 2.320 μs   (2.251 μs .. 2.702 μs)-std dev              417.9 ns   (60.72 ns .. 1.012 μs)-variance introduced by outliers: 96% (severely inflated)+time                 2.234 μs   (2.216 μs .. 2.252 μs)+                     0.999 R²   (0.999 R² .. 1.000 R²)+mean                 2.243 μs   (2.227 μs .. 2.261 μs)+std dev              58.33 ns   (45.77 ns .. 81.74 ns)+variance introduced by outliers: 32% (moderately inflated)  benchmarking http-req/binary-parsers-time                 1.552 μs   (1.533 μs .. 1.577 μs)-                     0.980 R²   (0.942 R² .. 0.999 R²)-mean                 1.673 μs   (1.549 μs .. 1.984 μs)-std dev              583.2 ns   (53.70 ns .. 1.115 μs)-variance introduced by outliers: 99% (severely inflated)+time                 1.355 μs   (1.344 μs .. 1.368 μs)+                     0.999 R²   (0.999 R² .. 1.000 R²)+mean                 1.367 μs   (1.354 μs .. 1.379 μs)+std dev              42.42 ns   (34.69 ns .. 54.51 ns)+variance introduced by outliers: 42% (moderately inflated) +benchmarking http-req/scanner+time                 1.440 μs   (1.346 μs .. 1.652 μs)+                     0.928 R²   (0.848 R² .. 0.999 R²)+mean                 1.392 μs   (1.345 μs .. 1.528 μs)+std dev              268.6 ns   (40.18 ns .. 516.8 ns)+variance introduced by outliers: 97% (severely inflated)+ benchmarking http-req/warp-time                 903.0 ns   (894.7 ns .. 911.2 ns)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 906.6 ns   (896.2 ns .. 918.4 ns)-std dev              36.38 ns   (28.49 ns .. 51.58 ns)-variance introduced by outliers: 56% (severely inflated)+time                 921.0 ns   (913.2 ns .. 928.5 ns)+                     0.999 R²   (0.999 R² .. 1.000 R²)+mean                 923.5 ns   (916.3 ns .. 931.3 ns)+std dev              25.51 ns   (21.12 ns .. 31.75 ns)+variance introduced by outliers: 38% (moderately inflated) +start benchmark JSON parser benchmarking attoparsec/buffer-builder-time                 4.025 ms   (3.965 ms .. 4.097 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 4.180 ms   (4.133 ms .. 4.242 ms)-std dev              164.2 μs   (126.7 μs .. 204.4 μs)-variance introduced by outliers: 22% (moderately inflated)+time                 4.152 ms   (4.088 ms .. 4.201 ms)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 4.256 ms   (4.221 ms .. 4.302 ms)+std dev              128.6 μs   (97.90 μs .. 190.0 μs)+variance introduced by outliers: 13% (moderately inflated)  benchmarking binary-parser/buffer-builder-time                 3.509 ms   (3.462 ms .. 3.552 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 3.585 ms   (3.550 ms .. 3.646 ms)-std dev              151.8 μs   (85.69 μs .. 273.2 μs)-variance introduced by outliers: 24% (moderately inflated)+time                 3.768 ms   (3.663 ms .. 3.910 ms)+                     0.993 R²   (0.986 R² .. 0.998 R²)+mean                 3.815 ms   (3.765 ms .. 3.877 ms)+std dev              175.5 μs   (140.6 μs .. 253.8 μs)+variance introduced by outliers: 27% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/buffer-builder-time                 4.360 ms   (4.192 ms .. 4.641 ms)-                     0.970 R²   (0.936 R² .. 0.996 R²)-mean                 4.355 ms   (4.254 ms .. 4.546 ms)-std dev              408.3 μs   (258.9 μs .. 687.3 μs)-variance introduced by outliers: 59% (severely inflated)+time                 4.117 ms   (4.037 ms .. 4.186 ms)+                     0.997 R²   (0.994 R² .. 0.999 R²)+mean                 4.328 ms   (4.151 ms .. 5.153 ms)+std dev              1.013 ms   (102.4 μs .. 2.296 ms)+variance introduced by outliers: 90% (severely inflated)  benchmarking binary-parser/lazy-bytestring/buffer-builder-time                 3.541 ms   (3.476 ms .. 3.602 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 3.560 ms   (3.525 ms .. 3.607 ms)-std dev              127.2 μs   (98.15 μs .. 170.4 μs)-variance introduced by outliers: 18% (moderately inflated)+time                 4.146 ms   (3.765 ms .. 4.911 ms)+                     0.763 R²   (0.649 R² .. 0.975 R²)+mean                 4.158 ms   (3.859 ms .. 4.783 ms)+std dev              1.300 ms   (791.0 μs .. 1.930 ms)+variance introduced by outliers: 95% (severely inflated)  benchmarking attoparsec/dates-fract-time                 4.266 μs   (4.112 μs .. 4.506 μs)-                     0.979 R²   (0.945 R² .. 0.999 R²)-mean                 4.184 μs   (4.099 μs .. 4.485 μs)-std dev              495.3 ns   (141.5 ns .. 1.023 μs)-variance introduced by outliers: 91% (severely inflated)+time                 3.990 μs   (3.934 μs .. 4.064 μs)+                     0.958 R²   (0.869 R² .. 0.998 R²)+mean                 4.678 μs   (4.105 μs .. 6.598 μs)+std dev              3.240 μs   (890.6 ns .. 6.569 μs)+variance introduced by outliers: 99% (severely inflated)  benchmarking binary-parser/dates-fract-time                 3.179 μs   (3.151 μs .. 3.206 μs)-                     0.999 R²   (0.999 R² .. 0.999 R²)-mean                 3.192 μs   (3.161 μs .. 3.224 μs)-std dev              106.0 ns   (88.88 ns .. 130.2 ns)-variance introduced by outliers: 43% (moderately inflated)+time                 3.073 μs   (2.993 μs .. 3.168 μs)+                     0.993 R²   (0.987 R² .. 0.999 R²)+mean                 3.130 μs   (3.030 μs .. 3.534 μs)+std dev              582.4 ns   (196.7 ns .. 1.256 μs)+variance introduced by outliers: 97% (severely inflated)  benchmarking attoparsec/lazy-bytestring/dates-fract-time                 4.176 μs   (4.140 μs .. 4.213 μs)-                     0.999 R²   (0.999 R² .. 0.999 R²)-mean                 4.158 μs   (4.115 μs .. 4.194 μs)-std dev              126.3 ns   (102.9 ns .. 156.6 ns)-variance introduced by outliers: 38% (moderately inflated)+time                 4.162 μs   (4.079 μs .. 4.301 μs)+                     0.936 R²   (0.818 R² .. 0.998 R²)+mean                 4.485 μs   (4.118 μs .. 5.618 μs)+std dev              2.185 μs   (241.3 ns .. 4.168 μs)+variance introduced by outliers: 99% (severely inflated)  benchmarking binary-parser/lazy-bytestring/dates-fract-time                 3.243 μs   (3.199 μs .. 3.290 μs)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 3.225 μs   (3.193 μs .. 3.259 μs)-std dev              108.6 ns   (90.97 ns .. 130.0 ns)-variance introduced by outliers: 44% (moderately inflated)+time                 3.038 μs   (3.017 μs .. 3.061 μs)+                     0.999 R²   (0.999 R² .. 1.000 R²)+mean                 3.042 μs   (3.017 μs .. 3.067 μs)+std dev              86.40 ns   (72.15 ns .. 110.5 ns)+variance introduced by outliers: 36% (moderately inflated)  benchmarking attoparsec/dates-time                 3.912 μs   (3.866 μs .. 3.962 μs)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 3.897 μs   (3.858 μs .. 3.940 μs)-std dev              134.6 ns   (115.1 ns .. 161.1 ns)-variance introduced by outliers: 44% (moderately inflated)+time                 3.890 μs   (3.852 μs .. 3.927 μs)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 3.911 μs   (3.869 μs .. 3.955 μs)+std dev              147.6 ns   (125.4 ns .. 185.8 ns)+variance introduced by outliers: 49% (moderately inflated)  benchmarking binary-parser/dates-time                 3.049 μs   (3.030 μs .. 3.068 μs)-                     0.999 R²   (0.999 R² .. 1.000 R²)-mean                 3.044 μs   (3.017 μs .. 3.083 μs)-std dev              100.4 ns   (78.69 ns .. 158.1 ns)-variance introduced by outliers: 43% (moderately inflated)+time                 2.962 μs   (2.930 μs .. 2.993 μs)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 2.971 μs   (2.940 μs .. 3.007 μs)+std dev              115.6 ns   (92.31 ns .. 143.5 ns)+variance introduced by outliers: 51% (severely inflated)  benchmarking attoparsec/lazy-bytestring/dates-time                 4.063 μs   (3.949 μs .. 4.309 μs)-                     0.971 R²   (0.914 R² .. 0.999 R²)-mean                 4.086 μs   (3.967 μs .. 4.648 μs)-std dev              698.0 ns   (100.7 ns .. 1.573 μs)-variance introduced by outliers: 95% (severely inflated)+time                 3.950 μs   (3.891 μs .. 4.010 μs)+                     0.998 R²   (0.997 R² .. 0.999 R²)+mean                 3.954 μs   (3.905 μs .. 4.009 μs)+std dev              171.8 ns   (145.4 ns .. 203.0 ns)+variance introduced by outliers: 56% (severely inflated)  benchmarking binary-parser/lazy-bytestring/dates-time                 3.119 μs   (3.090 μs .. 3.144 μs)+time                 2.961 μs   (2.935 μs .. 2.987 μs)                      0.999 R²   (0.999 R² .. 1.000 R²)-mean                 3.136 μs   (3.104 μs .. 3.177 μs)-std dev              117.7 ns   (89.99 ns .. 159.5 ns)-variance introduced by outliers: 50% (moderately inflated)+mean                 2.960 μs   (2.936 μs .. 2.993 μs)+std dev              93.80 ns   (72.84 ns .. 145.9 ns)+variance introduced by outliers: 41% (moderately inflated)  benchmarking attoparsec/example-time                 72.13 μs   (70.94 μs .. 73.31 μs)+time                 74.67 μs   (73.57 μs .. 75.75 μs)                      0.998 R²   (0.998 R² .. 0.999 R²)-mean                 72.33 μs   (71.62 μs .. 73.14 μs)-std dev              2.436 μs   (2.064 μs .. 2.884 μs)-variance introduced by outliers: 34% (moderately inflated)+mean                 74.86 μs   (74.11 μs .. 75.73 μs)+std dev              2.666 μs   (2.239 μs .. 3.379 μs)+variance introduced by outliers: 37% (moderately inflated)  benchmarking binary-parser/example-time                 56.33 μs   (55.34 μs .. 57.30 μs)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 56.49 μs   (55.79 μs .. 57.23 μs)-std dev              2.350 μs   (2.001 μs .. 2.837 μs)-variance introduced by outliers: 45% (moderately inflated)+time                 57.40 μs   (56.92 μs .. 57.90 μs)+                     0.999 R²   (0.999 R² .. 1.000 R²)+mean                 57.63 μs   (57.19 μs .. 58.12 μs)+std dev              1.585 μs   (1.240 μs .. 2.004 μs)+variance introduced by outliers: 26% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/example-time                 77.40 μs   (76.73 μs .. 78.14 μs)+time                 78.02 μs   (77.31 μs .. 78.81 μs)                      0.999 R²   (0.998 R² .. 0.999 R²)-mean                 76.89 μs   (76.17 μs .. 77.52 μs)-std dev              2.279 μs   (1.928 μs .. 2.805 μs)-variance introduced by outliers: 28% (moderately inflated)+mean                 78.12 μs   (77.35 μs .. 78.97 μs)+std dev              2.733 μs   (2.141 μs .. 3.506 μs)+variance introduced by outliers: 35% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/example-time                 55.60 μs   (54.87 μs .. 56.35 μs)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 55.96 μs   (55.38 μs .. 56.61 μs)-std dev              2.079 μs   (1.695 μs .. 2.696 μs)-variance introduced by outliers: 40% (moderately inflated)+time                 62.15 μs   (57.00 μs .. 72.25 μs)+                     0.931 R²   (0.874 R² .. 0.999 R²)+mean                 58.85 μs   (57.24 μs .. 63.61 μs)+std dev              8.903 μs   (2.232 μs .. 18.31 μs)+variance introduced by outliers: 92% (severely inflated)  benchmarking attoparsec/geometry-time                 3.276 ms   (3.193 ms .. 3.358 ms)-                     0.956 R²   (0.864 R² .. 0.999 R²)-mean                 3.469 ms   (3.348 ms .. 3.945 ms)-std dev              643.7 μs   (126.3 μs .. 1.290 ms)-variance introduced by outliers: 86% (severely inflated)+time                 3.216 ms   (3.166 ms .. 3.266 ms)+                     0.995 R²   (0.986 R² .. 0.999 R²)+mean                 3.293 ms   (3.235 ms .. 3.410 ms)+std dev              258.3 μs   (113.4 μs .. 481.1 μs)+variance introduced by outliers: 53% (severely inflated)  benchmarking binary-parser/geometry-time                 2.391 ms   (2.365 ms .. 2.414 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 2.400 ms   (2.382 ms .. 2.422 ms)-std dev              67.04 μs   (55.68 μs .. 89.92 μs)-variance introduced by outliers: 14% (moderately inflated)+time                 2.466 ms   (2.418 ms .. 2.523 ms)+                     0.996 R²   (0.994 R² .. 0.998 R²)+mean                 2.527 ms   (2.498 ms .. 2.567 ms)+std dev              114.9 μs   (92.96 μs .. 146.6 μs)+variance introduced by outliers: 29% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/geometry-time                 3.310 ms   (3.268 ms .. 3.358 ms)+time                 3.296 ms   (3.240 ms .. 3.357 ms)                      0.998 R²   (0.997 R² .. 0.999 R²)-mean                 3.331 ms   (3.300 ms .. 3.365 ms)-std dev              98.28 μs   (81.46 μs .. 121.5 μs)+mean                 3.282 ms   (3.252 ms .. 3.310 ms)+std dev              94.60 μs   (78.03 μs .. 117.8 μs) variance introduced by outliers: 14% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/geometry-time                 2.367 ms   (2.340 ms .. 2.403 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 2.381 ms   (2.361 ms .. 2.403 ms)-std dev              74.51 μs   (61.89 μs .. 90.25 μs)-variance introduced by outliers: 18% (moderately inflated)+time                 2.462 ms   (2.424 ms .. 2.500 ms)+                     0.998 R²   (0.996 R² .. 0.999 R²)+mean                 2.454 ms   (2.431 ms .. 2.483 ms)+std dev              90.13 μs   (74.45 μs .. 119.6 μs)+variance introduced by outliers: 22% (moderately inflated)  benchmarking attoparsec/integers-time                 288.9 μs   (286.7 μs .. 290.7 μs)-                     0.999 R²   (0.999 R² .. 0.999 R²)-mean                 290.2 μs   (287.6 μs .. 293.5 μs)-std dev              9.951 μs   (7.963 μs .. 12.97 μs)-variance introduced by outliers: 29% (moderately inflated)+time                 303.8 μs   (301.0 μs .. 306.8 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 304.3 μs   (301.6 μs .. 307.0 μs)+std dev              8.985 μs   (7.176 μs .. 11.49 μs)+variance introduced by outliers: 23% (moderately inflated)  benchmarking binary-parser/integers-time                 160.9 μs   (159.3 μs .. 162.5 μs)-                     0.999 R²   (0.999 R² .. 1.000 R²)-mean                 159.9 μs   (158.6 μs .. 161.4 μs)-std dev              4.600 μs   (3.712 μs .. 5.996 μs)-variance introduced by outliers: 25% (moderately inflated)+time                 222.4 μs   (206.7 μs .. 245.6 μs)+                     0.956 R²   (0.907 R² .. 0.998 R²)+mean                 210.2 μs   (205.4 μs .. 226.7 μs)+std dev              26.99 μs   (8.189 μs .. 54.58 μs)+variance introduced by outliers: 86% (severely inflated)  benchmarking attoparsec/lazy-bytestring/integers-time                 291.4 μs   (284.9 μs .. 297.8 μs)-                     0.981 R²   (0.947 R² .. 0.998 R²)-mean                 333.5 μs   (298.2 μs .. 439.6 μs)-std dev              168.6 μs   (12.37 μs .. 334.8 μs)-variance introduced by outliers: 99% (severely inflated)+time                 302.1 μs   (298.8 μs .. 305.5 μs)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 304.8 μs   (302.9 μs .. 307.2 μs)+std dev              7.239 μs   (5.903 μs .. 8.904 μs)+variance introduced by outliers: 16% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/integers-time                 162.9 μs   (160.7 μs .. 165.5 μs)+time                 206.4 μs   (203.0 μs .. 210.2 μs)                      0.998 R²   (0.998 R² .. 0.999 R²)-mean                 163.0 μs   (161.3 μs .. 165.4 μs)-std dev              6.593 μs   (5.433 μs .. 8.570 μs)-variance introduced by outliers: 40% (moderately inflated)+mean                 204.7 μs   (203.1 μs .. 206.3 μs)+std dev              5.477 μs   (4.497 μs .. 6.974 μs)+variance introduced by outliers: 21% (moderately inflated)  benchmarking attoparsec/jp10-time                 482.6 μs   (478.1 μs .. 488.4 μs)-                     0.997 R²   (0.994 R² .. 0.999 R²)-mean                 493.1 μs   (487.6 μs .. 501.3 μs)-std dev              23.78 μs   (16.67 μs .. 38.12 μs)-variance introduced by outliers: 42% (moderately inflated)+time                 489.4 μs   (484.9 μs .. 495.0 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 490.0 μs   (486.2 μs .. 494.0 μs)+std dev              13.70 μs   (10.93 μs .. 18.78 μs)+variance introduced by outliers: 20% (moderately inflated)  benchmarking binary-parser/jp10-time                 469.5 μs   (464.7 μs .. 474.2 μs)-                     0.999 R²   (0.999 R² .. 0.999 R²)-mean                 473.4 μs   (469.2 μs .. 477.6 μs)-std dev              13.50 μs   (10.90 μs .. 17.13 μs)-variance introduced by outliers: 20% (moderately inflated)+time                 458.2 μs   (455.1 μs .. 461.6 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 463.4 μs   (459.1 μs .. 468.5 μs)+std dev              15.32 μs   (12.59 μs .. 19.01 μs)+variance introduced by outliers: 26% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/jp10-time                 484.6 μs   (478.4 μs .. 489.7 μs)+time                 488.0 μs   (480.6 μs .. 493.8 μs)                      0.999 R²   (0.998 R² .. 0.999 R²)-mean                 486.6 μs   (482.1 μs .. 493.4 μs)-std dev              18.89 μs   (13.73 μs .. 27.58 μs)-variance introduced by outliers: 33% (moderately inflated)+mean                 485.8 μs   (481.6 μs .. 490.0 μs)+std dev              14.50 μs   (11.70 μs .. 19.83 μs)+variance introduced by outliers: 22% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/jp10-time                 467.7 μs   (461.8 μs .. 472.8 μs)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 467.9 μs   (463.6 μs .. 472.4 μs)-std dev              15.49 μs   (13.18 μs .. 18.54 μs)-variance introduced by outliers: 26% (moderately inflated)+time                 478.6 μs   (453.6 μs .. 535.7 μs)+                     0.932 R²   (0.837 R² .. 0.999 R²)+mean                 473.8 μs   (458.7 μs .. 527.8 μs)+std dev              84.24 μs   (12.21 μs .. 172.8 μs)+variance introduced by outliers: 91% (severely inflated)  benchmarking attoparsec/jp100-time                 2.971 ms   (2.942 ms .. 3.005 ms)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 3.022 ms   (2.997 ms .. 3.051 ms)-std dev              89.08 μs   (74.72 μs .. 111.6 μs)-variance introduced by outliers: 15% (moderately inflated)+time                 2.961 ms   (2.913 ms .. 3.010 ms)+                     0.998 R²   (0.997 R² .. 0.999 R²)+mean                 3.009 ms   (2.985 ms .. 3.035 ms)+std dev              78.61 μs   (67.01 μs .. 95.10 μs)+variance introduced by outliers: 11% (moderately inflated)  benchmarking binary-parser/jp100-time                 2.607 ms   (2.564 ms .. 2.652 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 2.606 ms   (2.579 ms .. 2.630 ms)-std dev              79.86 μs   (67.90 μs .. 97.65 μs)-variance introduced by outliers: 16% (moderately inflated)+time                 2.735 ms   (2.703 ms .. 2.771 ms)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 2.731 ms   (2.707 ms .. 2.762 ms)+std dev              91.60 μs   (70.79 μs .. 137.6 μs)+variance introduced by outliers: 18% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/jp100-time                 3.028 ms   (2.986 ms .. 3.065 ms)+time                 3.005 ms   (2.964 ms .. 3.051 ms)                      0.998 R²   (0.996 R² .. 0.999 R²)-mean                 3.073 ms   (3.046 ms .. 3.109 ms)-std dev              102.4 μs   (80.67 μs .. 139.1 μs)-variance introduced by outliers: 17% (moderately inflated)+mean                 3.095 ms   (3.065 ms .. 3.128 ms)+std dev              108.5 μs   (88.97 μs .. 134.4 μs)+variance introduced by outliers: 19% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/jp100-time                 2.617 ms   (2.568 ms .. 2.658 ms)+time                 2.760 ms   (2.724 ms .. 2.797 ms)                      0.998 R²   (0.997 R² .. 0.999 R²)-mean                 2.588 ms   (2.560 ms .. 2.619 ms)-std dev              94.41 μs   (78.93 μs .. 115.4 μs)-variance introduced by outliers: 20% (moderately inflated)+mean                 2.747 ms   (2.718 ms .. 2.776 ms)+std dev              93.90 μs   (71.25 μs .. 122.5 μs)+variance introduced by outliers: 19% (moderately inflated)  benchmarking attoparsec/jp50-time                 1.575 ms   (1.558 ms .. 1.591 ms)-                     0.998 R²   (0.998 R² .. 0.999 R²)-mean                 1.578 ms   (1.564 ms .. 1.594 ms)-std dev              52.98 μs   (44.55 μs .. 63.68 μs)-variance introduced by outliers: 21% (moderately inflated)+time                 1.618 ms   (1.591 ms .. 1.648 ms)+                     0.998 R²   (0.997 R² .. 0.999 R²)+mean                 1.616 ms   (1.602 ms .. 1.633 ms)+std dev              50.98 μs   (40.28 μs .. 69.45 μs)+variance introduced by outliers: 19% (moderately inflated)  benchmarking binary-parser/jp50-time                 1.541 ms   (1.434 ms .. 1.744 ms)-                     0.957 R²   (0.923 R² .. 0.999 R²)-mean                 1.457 ms   (1.433 ms .. 1.555 ms)-std dev              130.2 μs   (39.54 μs .. 284.7 μs)-variance introduced by outliers: 65% (severely inflated)+time                 1.518 ms   (1.459 ms .. 1.674 ms)+                     0.863 R²   (0.672 R² .. 0.999 R²)+mean                 1.533 ms   (1.466 ms .. 1.801 ms)+std dev              421.6 μs   (44.69 μs .. 893.1 μs)+variance introduced by outliers: 95% (severely inflated)  benchmarking attoparsec/lazy-bytestring/jp50-time                 1.597 ms   (1.574 ms .. 1.625 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 1.617 ms   (1.603 ms .. 1.632 ms)-std dev              51.29 μs   (42.45 μs .. 62.77 μs)-variance introduced by outliers: 19% (moderately inflated)+time                 1.668 ms   (1.655 ms .. 1.684 ms)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 1.674 ms   (1.664 ms .. 1.690 ms)+std dev              42.55 μs   (34.99 μs .. 54.22 μs)+variance introduced by outliers: 12% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/jp50-time                 1.426 ms   (1.399 ms .. 1.458 ms)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 1.431 ms   (1.419 ms .. 1.446 ms)-std dev              47.52 μs   (39.10 μs .. 56.91 μs)-variance introduced by outliers: 21% (moderately inflated)+time                 1.436 ms   (1.420 ms .. 1.453 ms)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 1.476 ms   (1.462 ms .. 1.490 ms)+std dev              47.49 μs   (39.59 μs .. 57.24 μs)+variance introduced by outliers: 20% (moderately inflated)  benchmarking attoparsec/numbers-time                 550.2 μs   (542.0 μs .. 558.2 μs)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 555.0 μs   (548.9 μs .. 566.3 μs)-std dev              26.67 μs   (15.70 μs .. 47.26 μs)-variance introduced by outliers: 41% (moderately inflated)+time                 549.6 μs   (541.4 μs .. 558.1 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 545.8 μs   (541.5 μs .. 550.4 μs)+std dev              14.23 μs   (11.57 μs .. 18.70 μs)+variance introduced by outliers: 17% (moderately inflated)  benchmarking binary-parser/numbers-time                 353.7 μs   (349.1 μs .. 358.3 μs)+time                 365.3 μs   (361.6 μs .. 369.2 μs)                      0.999 R²   (0.998 R² .. 0.999 R²)-mean                 355.1 μs   (352.0 μs .. 358.6 μs)-std dev              11.49 μs   (9.664 μs .. 14.16 μs)-variance introduced by outliers: 26% (moderately inflated)+mean                 366.2 μs   (363.1 μs .. 369.7 μs)+std dev              11.05 μs   (9.100 μs .. 13.57 μs)+variance introduced by outliers: 23% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/numbers-time                 555.6 μs   (547.5 μs .. 563.2 μs)+time                 550.6 μs   (545.9 μs .. 554.0 μs)                      0.999 R²   (0.998 R² .. 0.999 R²)-mean                 557.2 μs   (551.7 μs .. 562.6 μs)-std dev              17.77 μs   (15.35 μs .. 20.77 μs)-variance introduced by outliers: 23% (moderately inflated)+mean                 547.2 μs   (542.7 μs .. 551.8 μs)+std dev              14.99 μs   (12.38 μs .. 19.36 μs)+variance introduced by outliers: 19% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/numbers-time                 374.7 μs   (358.4 μs .. 405.1 μs)-                     0.973 R²   (0.938 R² .. 0.999 R²)-mean                 362.9 μs   (357.1 μs .. 385.7 μs)-std dev              33.84 μs   (9.270 μs .. 69.65 μs)-variance introduced by outliers: 75% (severely inflated)+time                 370.4 μs   (364.8 μs .. 379.3 μs)+                     0.932 R²   (0.791 R² .. 0.999 R²)+mean                 397.1 μs   (371.9 μs .. 490.7 μs)+std dev              152.8 μs   (12.14 μs .. 323.0 μs)+variance introduced by outliers: 99% (severely inflated)  benchmarking attoparsec/twitter1-time                 23.99 μs   (23.79 μs .. 24.22 μs)-                     0.999 R²   (0.999 R² .. 0.999 R²)-mean                 23.85 μs   (23.61 μs .. 24.08 μs)-std dev              785.0 ns   (666.1 ns .. 941.3 ns)-variance introduced by outliers: 37% (moderately inflated)+time                 24.33 μs   (24.01 μs .. 24.61 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 24.11 μs   (23.86 μs .. 24.38 μs)+std dev              907.2 ns   (757.5 ns .. 1.133 μs)+variance introduced by outliers: 43% (moderately inflated)  benchmarking binary-parser/twitter1-time                 17.50 μs   (17.24 μs .. 17.74 μs)-                     0.998 R²   (0.998 R² .. 0.999 R²)-mean                 17.63 μs   (17.38 μs .. 17.87 μs)-std dev              794.7 ns   (649.8 ns .. 962.0 ns)-variance introduced by outliers: 53% (severely inflated)+time                 18.40 μs   (18.27 μs .. 18.54 μs)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 18.39 μs   (18.19 μs .. 18.58 μs)+std dev              657.9 ns   (537.6 ns .. 849.5 ns)+variance introduced by outliers: 42% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/twitter1-time                 23.77 μs   (23.55 μs .. 23.96 μs)-                     0.999 R²   (0.999 R² .. 0.999 R²)-mean                 23.91 μs   (23.67 μs .. 24.18 μs)-std dev              838.7 ns   (646.4 ns .. 1.126 μs)-variance introduced by outliers: 40% (moderately inflated)+time                 24.34 μs   (24.10 μs .. 24.62 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 24.30 μs   (24.00 μs .. 24.57 μs)+std dev              959.3 ns   (787.1 ns .. 1.229 μs)+variance introduced by outliers: 46% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/twitter1-time                 17.30 μs   (17.17 μs .. 17.42 μs)+time                 18.27 μs   (18.11 μs .. 18.45 μs)                      0.999 R²   (0.999 R² .. 0.999 R²)-mean                 17.31 μs   (17.15 μs .. 17.49 μs)-std dev              557.8 ns   (451.0 ns .. 701.1 ns)-variance introduced by outliers: 37% (moderately inflated)+mean                 18.43 μs   (18.25 μs .. 18.65 μs)+std dev              627.3 ns   (509.6 ns .. 763.0 ns)+variance introduced by outliers: 39% (moderately inflated)  benchmarking attoparsec/twitter10-time                 166.0 μs   (164.0 μs .. 168.0 μs)-                     0.998 R²   (0.998 R² .. 0.999 R²)-mean                 166.2 μs   (164.3 μs .. 168.2 μs)-std dev              6.722 μs   (5.565 μs .. 8.233 μs)-variance introduced by outliers: 40% (moderately inflated)+time                 177.9 μs   (175.8 μs .. 179.7 μs)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 176.6 μs   (175.0 μs .. 178.3 μs)+std dev              5.613 μs   (4.525 μs .. 7.147 μs)+variance introduced by outliers: 28% (moderately inflated)  benchmarking binary-parser/twitter10-time                 129.0 μs   (125.0 μs .. 136.1 μs)-                     0.968 R²   (0.914 R² .. 0.999 R²)-mean                 130.8 μs   (127.4 μs .. 143.7 μs)-std dev              19.73 μs   (4.362 μs .. 41.31 μs)-variance introduced by outliers: 91% (severely inflated)+time                 137.7 μs   (133.9 μs .. 141.0 μs)+                     0.974 R²   (0.940 R² .. 0.996 R²)+mean                 217.6 μs   (158.7 μs .. 343.3 μs)+std dev              289.1 μs   (104.6 μs .. 496.4 μs)+variance introduced by outliers: 99% (severely inflated)  benchmarking attoparsec/lazy-bytestring/twitter10-time                 165.5 μs   (163.8 μs .. 167.2 μs)+time                 172.6 μs   (171.0 μs .. 174.1 μs)                      0.999 R²   (0.998 R² .. 0.999 R²)-mean                 167.4 μs   (165.4 μs .. 169.5 μs)-std dev              6.295 μs   (5.242 μs .. 7.620 μs)-variance introduced by outliers: 36% (moderately inflated)+mean                 174.4 μs   (172.5 μs .. 176.7 μs)+std dev              7.031 μs   (5.406 μs .. 9.696 μs)+variance introduced by outliers: 39% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/twitter10-time                 131.0 μs   (128.5 μs .. 134.4 μs)-                     0.997 R²   (0.995 R² .. 0.999 R²)-mean                 129.8 μs   (128.5 μs .. 131.8 μs)-std dev              5.415 μs   (3.935 μs .. 7.494 μs)-variance introduced by outliers: 42% (moderately inflated)+time                 138.8 μs   (137.9 μs .. 139.9 μs)+                     0.999 R²   (0.999 R² .. 0.999 R²)+mean                 140.6 μs   (139.2 μs .. 142.2 μs)+std dev              4.915 μs   (3.984 μs .. 6.230 μs)+variance introduced by outliers: 33% (moderately inflated)  benchmarking attoparsec/twitter100-time                 2.183 ms   (2.148 ms .. 2.220 ms)+time                 2.273 ms   (2.236 ms .. 2.301 ms)                      0.998 R²   (0.997 R² .. 0.999 R²)-mean                 2.197 ms   (2.175 ms .. 2.224 ms)-std dev              88.02 μs   (64.96 μs .. 133.4 μs)-variance introduced by outliers: 26% (moderately inflated)+mean                 2.276 ms   (2.258 ms .. 2.299 ms)+std dev              69.99 μs   (50.91 μs .. 109.2 μs)+variance introduced by outliers: 17% (moderately inflated)  benchmarking binary-parser/twitter100-time                 1.865 ms   (1.839 ms .. 1.890 ms)+time                 2.035 ms   (2.007 ms .. 2.059 ms)                      0.998 R²   (0.997 R² .. 0.999 R²)-mean                 1.873 ms   (1.852 ms .. 1.897 ms)-std dev              74.75 μs   (60.54 μs .. 95.21 μs)-variance introduced by outliers: 26% (moderately inflated)+mean                 2.056 ms   (2.034 ms .. 2.078 ms)+std dev              74.85 μs   (62.02 μs .. 88.08 μs)+variance introduced by outliers: 22% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/twitter100-time                 2.251 ms   (2.221 ms .. 2.284 ms)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 2.287 ms   (2.267 ms .. 2.310 ms)-std dev              73.91 μs   (55.21 μs .. 97.13 μs)-variance introduced by outliers: 17% (moderately inflated)+time                 2.550 ms   (2.322 ms .. 2.870 ms)+                     0.960 R²   (0.931 R² .. 0.998 R²)+mean                 2.359 ms   (2.322 ms .. 2.459 ms)+std dev              194.3 μs   (75.87 μs .. 386.2 μs)+variance introduced by outliers: 58% (severely inflated)  benchmarking binary-parser/lazy-bytestring/twitter100-time                 1.854 ms   (1.802 ms .. 1.886 ms)-                     0.963 R²   (0.870 R² .. 0.999 R²)-mean                 1.992 ms   (1.905 ms .. 2.391 ms)-std dev              509.8 μs   (62.89 μs .. 1.153 ms)-variance introduced by outliers: 94% (severely inflated)+time                 2.016 ms   (1.983 ms .. 2.050 ms)+                     0.998 R²   (0.997 R² .. 0.999 R²)+mean                 2.052 ms   (2.031 ms .. 2.078 ms)+std dev              80.58 μs   (63.40 μs .. 112.5 μs)+variance introduced by outliers: 25% (moderately inflated)  benchmarking attoparsec/twitter20-time                 359.4 μs   (354.8 μs .. 364.8 μs)-                     0.998 R²   (0.998 R² .. 0.999 R²)-mean                 361.2 μs   (357.4 μs .. 364.7 μs)-std dev              12.05 μs   (10.01 μs .. 14.71 μs)-variance introduced by outliers: 27% (moderately inflated)+time                 377.3 μs   (373.5 μs .. 380.8 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 372.9 μs   (369.3 μs .. 376.9 μs)+std dev              12.50 μs   (10.42 μs .. 15.59 μs)+variance introduced by outliers: 28% (moderately inflated)  benchmarking binary-parser/twitter20-time                 311.8 μs   (307.3 μs .. 315.7 μs)-                     0.998 R²   (0.997 R² .. 0.999 R²)-mean                 310.6 μs   (307.1 μs .. 314.6 μs)-std dev              12.47 μs   (9.920 μs .. 16.24 μs)-variance introduced by outliers: 36% (moderately inflated)+time                 331.1 μs   (327.1 μs .. 335.0 μs)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 329.2 μs   (325.8 μs .. 332.4 μs)+std dev              11.08 μs   (9.652 μs .. 13.51 μs)+variance introduced by outliers: 28% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/twitter20-time                 361.3 μs   (357.9 μs .. 364.9 μs)+time                 375.3 μs   (372.2 μs .. 377.7 μs)                      0.999 R²   (0.999 R² .. 0.999 R²)-mean                 362.2 μs   (359.4 μs .. 365.5 μs)-std dev              9.791 μs   (7.821 μs .. 13.13 μs)-variance introduced by outliers: 20% (moderately inflated)+mean                 372.5 μs   (369.2 μs .. 376.2 μs)+std dev              11.27 μs   (9.275 μs .. 14.00 μs)+variance introduced by outliers: 23% (moderately inflated)  benchmarking binary-parser/lazy-bytestring/twitter20-time                 305.9 μs   (303.5 μs .. 308.5 μs)+time                 333.5 μs   (330.7 μs .. 336.2 μs)                      0.999 R²   (0.998 R² .. 0.999 R²)-mean                 309.5 μs   (306.4 μs .. 313.3 μs)-std dev              11.72 μs   (9.567 μs .. 15.23 μs)-variance introduced by outliers: 34% (moderately inflated)+mean                 334.0 μs   (330.9 μs .. 337.5 μs)+std dev              10.37 μs   (8.658 μs .. 13.04 μs)+variance introduced by outliers: 25% (moderately inflated)  benchmarking attoparsec/twitter50-time                 1.074 ms   (1.065 ms .. 1.084 ms)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 1.079 ms   (1.069 ms .. 1.092 ms)-std dev              40.33 μs   (30.96 μs .. 54.69 μs)-variance introduced by outliers: 26% (moderately inflated)+time                 1.247 ms   (1.125 ms .. 1.524 ms)+                     0.876 R²   (0.782 R² .. 0.999 R²)+mean                 1.169 ms   (1.134 ms .. 1.326 ms)+std dev              208.9 μs   (24.07 μs .. 477.5 μs)+variance introduced by outliers: 89% (severely inflated)  benchmarking binary-parser/twitter50-time                 943.5 μs   (930.2 μs .. 956.8 μs)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 956.1 μs   (948.7 μs .. 964.3 μs)-std dev              25.24 μs   (20.12 μs .. 31.51 μs)-variance introduced by outliers: 16% (moderately inflated)+time                 1.020 ms   (1.008 ms .. 1.031 ms)+                     0.998 R²   (0.998 R² .. 0.999 R²)+mean                 1.032 ms   (1.023 ms .. 1.042 ms)+std dev              32.65 μs   (26.99 μs .. 40.35 μs)+variance introduced by outliers: 20% (moderately inflated)  benchmarking attoparsec/lazy-bytestring/twitter50-time                 1.051 ms   (1.041 ms .. 1.064 ms)-                     0.999 R²   (0.998 R² .. 0.999 R²)-mean                 1.061 ms   (1.051 ms .. 1.070 ms)-std dev              33.20 μs   (27.71 μs .. 41.49 μs)-variance introduced by outliers: 21% (moderately inflated)+time                 1.105 ms   (1.085 ms .. 1.119 ms)+                     0.997 R²   (0.996 R² .. 0.998 R²)+mean                 1.144 ms   (1.122 ms .. 1.176 ms)+std dev              88.80 μs   (68.65 μs .. 110.9 μs)+variance introduced by outliers: 60% (severely inflated)  benchmarking binary-parser/lazy-bytestring/twitter50-time                 948.1 μs   (925.7 μs .. 975.2 μs)-                     0.996 R²   (0.994 R² .. 0.998 R²)-mean                 947.5 μs   (937.1 μs .. 959.5 μs)-std dev              38.20 μs   (31.36 μs .. 47.85 μs)-variance introduced by outliers: 31% (moderately inflated)+time                 1.026 ms   (1.015 ms .. 1.038 ms)+                     0.999 R²   (0.998 R² .. 0.999 R²)+mean                 1.035 ms   (1.027 ms .. 1.043 ms)+std dev              28.09 μs   (22.72 μs .. 36.10 μs)+variance introduced by outliers: 16% (moderately inflated)  Benchmark criterion: FINISH ```
bench/Bench.hs view
@@ -11,10 +11,16 @@ main :: IO () main = do     http <- HttpReq.headers++    putStrLn "start benchmark http request parser"+     defaultMain http +    putStrLn "start benchmark JSON parser"+     aeson <- Aeson.aeson     aesonbp <- AesonBP.aeson     aesonLazy <- Aeson.aesonLazy     aesonbpLazy <- AesonBP.aesonLazy+     (defaultMain . concat . transpose) [ aeson, aesonbp, aesonLazy, aesonbpLazy ]
bench/HttpReq.hs view
@@ -8,12 +8,14 @@ import Control.DeepSeq (NFData(..)) import Criterion.Types (Benchmark) import Network.Wai.Handler.Warp.RequestHeader (parseHeaderLines)+import Data.ByteString.Internal (c2w, w2c) import qualified Data.Attoparsec.ByteString as AP import qualified Data.Attoparsec.ByteString.Char8 as APC import qualified Data.ByteString.Char8 as BC import qualified Data.Binary.Parser as BP import qualified Data.Binary.Parser.Char8 as BPC import Network.HTTP.Types.Version (HttpVersion, http11)+import qualified Scanner as SC  headers :: IO [Benchmark] headers = do@@ -21,6 +23,7 @@   return [         bench "http-req/attoparsec" $ nf (AP.parseOnly attoRequest) req       , bench "http-req/binary-parsers" $ nf (BP.parseOnly bpRequest) req+      , bench "http-req/scanner" $ nf (SC.scanOnly scRequest) req       , bench "http-req/warp" $ nfIO (parseHeaderLines (BC.lines req))       ] @@ -65,7 +68,7 @@                   || ('0' <= c && c <= '0')                   || c == '_' || c == '-' -bpBodyLine = BPC.takeTill (\c -> c == '\r' || c == '\n') <* BP.satisfy BP.isEndOfLine+bpBodyLine = BPC.takeTill (\c -> c == '\r' || c == '\n') <* BP.endOfLine  bpReqLine = do   m <- (BPC.takeTill BPC.isSpace <* BPC.char ' ')@@ -75,10 +78,48 @@  bpHttpVersion = http11 <$ BP.string "HTTP/1.1" -bpRequest = (,) <$> (bpReqLine <* BP.satisfy BP.isEndOfLine) <*> bpManyHeader+bpRequest = (,) <$> (bpReqLine <* BP.endOfLine) <*> bpManyHeader  bpManyHeader = do   c <- BPC.peek   if c == '\r' || c == '\n'     then return []     else (:) <$> bpHeader <*> bpManyHeader++--------------------------------------------------------------------------------++scHeader = do+  name <- takeWhile1 (isHeaderChar . w2c) <* SC.char8 ':' <* SC.skipSpace+  body <- scBodyLine+  return (name, body)+  where+    isHeaderChar c = ('a' <= c && c <= 'z')+                  || ('A' <= c && c <= 'Z')+                  || ('0' <= c && c <= '0')+                  || c == '_' || c == '-'++    takeWhile1 p = do+        bs <- SC.takeWhile p+        if BC.null bs then fail "takeWhile1" else return bs++scBodyLine = SC.takeWhile (\w -> let c = w2c w in c /= '\r' && c /= '\n') <* SC.char8 '\n'++scReqLine = do+  m <- (SC.takeWhile (not . BP.isSpace) <* SC.char8 ' ')+  (p,q) <- BC.break (=='?') <$> (SC.takeWhile (not . BP.isSpace) <* SC.char8 ' ')+  v <- scHttpVersion+  return (m,p,q,v)++scHttpVersion = http11 <$ SC.string "HTTP/1.1"++scRequest = (,) <$> (scReqLine <* SC.char8 '\n') <*> scManyHeader++scManyHeader = do+  w <- SC.lookAhead+  case w of+    Just w' -> do+      let c = w2c w'+      if c == '\r' || c == '\n'+        then return []+        else (:) <$> scHeader <*> scManyHeader+    _ -> fail "scManyHeader"
binary-parsers.cabal view
@@ -1,5 +1,5 @@ name:                binary-parsers-version:             0.2.0.0+version:             0.2.1.0 synopsis:            Extends binary with parsec/attoparsec style parsing combinators. description:         Extends binary with parsec/attoparsec style parsing combinators. license:             BSD3@@ -61,6 +61,7 @@                     ,   unordered-containers                     ,   http-types                     ,   case-insensitive+                    ,   scanner      default-language: Haskell2010     hs-source-dirs:   bench