This package extends binary with parsec/attoparsec style parsing combinators. It's useful when you want to deal with various binary format, and it's very fast. You can now write more complex Binary
instances using comprehensive combinators, with serialisation packages like blaze-texual.
Binary's Get
monad is designed to perform best on non-backtracking cases, but it still provides fast backtracking support via Alternative
instance, it's overall an excellent alternative to attoparsec if you only deal with ByteString
.
binary-parsers comes with a test suite modified from attoparsec, and a JSON parsing benchmarks. Here you go:
git clone https://github.com/winterland1989/binary-parsers.git
cd binary-parsers
cabal update
cabal configure --enable-tests --enable-benchmarks
cabal build
Run the test suite and benchmarks.
cabal test
cabal bench
start benchmark http request parser
benchmarking http-req/attoparsec
time 2.339 μs (2.321 μs .. 2.358 μs)
0.999 R² (0.998 R² .. 1.000 R²)
mean 2.332 μs (2.307 μs .. 2.365 μs)
std dev 93.73 ns (65.36 ns .. 147.2 ns)
variance introduced by outliers: 54% (severely inflated)
benchmarking http-req/binary-parsers
time 1.387 μs (1.373 μs .. 1.400 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 1.393 μs (1.378 μs .. 1.412 μs)
std dev 56.09 ns (43.06 ns .. 77.02 ns)
variance introduced by outliers: 55% (severely inflated)
benchmarking http-req/scanner
time 1.553 μs (1.407 μs .. 1.817 μs)
0.923 R² (0.873 R² .. 0.999 R²)
mean 1.457 μs (1.416 μs .. 1.647 μs)
std dev 232.3 ns (41.02 ns .. 518.5 ns)
variance introduced by outliers: 95% (severely inflated)
benchmarking http-req/warp
time 939.2 ns (929.0 ns .. 950.5 ns)
0.999 R² (0.997 R² .. 0.999 R²)
mean 955.2 ns (943.9 ns .. 973.0 ns)
std dev 48.11 ns (36.60 ns .. 62.44 ns)
variance introduced by outliers: 67% (severely inflated)
start benchmark JSON parser
benchmarking attoparsec/buffer-builder
time 4.306 ms (4.222 ms .. 4.382 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 4.334 ms (4.286 ms .. 4.382 ms)
std dev 143.9 μs (117.8 μs .. 184.0 μs)
variance introduced by outliers: 15% (moderately inflated)
benchmarking binary-parser/buffer-builder
time 3.751 ms (3.678 ms .. 3.830 ms)
0.997 R² (0.995 R² .. 0.999 R²)
mean 3.802 ms (3.770 ms .. 3.845 ms)
std dev 120.5 μs (97.00 μs .. 153.3 μs)
variance introduced by outliers: 14% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/buffer-builder
time 4.407 ms (4.324 ms .. 4.473 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 4.386 ms (4.349 ms .. 4.425 ms)
std dev 123.3 μs (102.2 μs .. 156.8 μs)
variance introduced by outliers: 11% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/buffer-builder
time 3.686 ms (3.631 ms .. 3.734 ms)
0.998 R² (0.998 R² .. 0.999 R²)
mean 3.705 ms (3.676 ms .. 3.736 ms)
std dev 99.87 μs (84.11 μs .. 122.9 μs)
variance introduced by outliers: 12% (moderately inflated)
benchmarking attoparsec/dates-fract
time 4.391 μs (4.211 μs .. 4.727 μs)
0.939 R² (0.847 R² .. 0.999 R²)
mean 4.420 μs (4.225 μs .. 5.433 μs)
std dev 1.113 μs (162.8 ns .. 2.656 μs)
variance introduced by outliers: 98% (severely inflated)
benchmarking binary-parser/dates-fract
time 3.180 μs (3.161 μs .. 3.198 μs)
0.999 R² (0.999 R² .. 1.000 R²)
mean 3.180 μs (3.159 μs .. 3.207 μs)
std dev 81.49 ns (69.06 ns .. 97.57 ns)
variance introduced by outliers: 31% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/dates-fract
time 4.283 μs (4.224 μs .. 4.344 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 4.240 μs (4.196 μs .. 4.283 μs)
std dev 149.1 ns (122.7 ns .. 178.2 ns)
variance introduced by outliers: 45% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/dates-fract
time 3.241 μs (3.207 μs .. 3.273 μs)
0.999 R² (0.997 R² .. 0.999 R²)
mean 3.247 μs (3.218 μs .. 3.301 μs)
std dev 128.4 ns (94.42 ns .. 199.9 ns)
variance introduced by outliers: 52% (severely inflated)
benchmarking attoparsec/dates
time 4.000 μs (3.967 μs .. 4.033 μs)
0.999 R² (0.999 R² .. 1.000 R²)
mean 4.025 μs (3.987 μs .. 4.075 μs)
std dev 141.9 ns (109.4 ns .. 221.2 ns)
variance introduced by outliers: 45% (moderately inflated)
benchmarking binary-parser/dates
time 3.049 μs (3.021 μs .. 3.077 μs)
0.996 R² (0.988 R² .. 0.999 R²)
mean 3.132 μs (3.049 μs .. 3.379 μs)
std dev 477.9 ns (103.8 ns .. 910.2 ns)
variance introduced by outliers: 94% (severely inflated)
benchmarking attoparsec/lazy-bytestring/dates
time 4.096 μs (4.020 μs .. 4.243 μs)
0.930 R² (0.807 R² .. 0.999 R²)
mean 4.490 μs (4.116 μs .. 5.966 μs)
std dev 2.110 μs (240.5 ns .. 4.653 μs)
variance introduced by outliers: 99% (severely inflated)
benchmarking binary-parser/lazy-bytestring/dates
time 3.136 μs (3.110 μs .. 3.157 μs)
0.999 R² (0.999 R² .. 0.999 R²)
mean 3.132 μs (3.103 μs .. 3.180 μs)
std dev 126.2 ns (93.20 ns .. 177.0 ns)
variance introduced by outliers: 53% (severely inflated)
benchmarking attoparsec/example
time 76.28 μs (75.38 μs .. 77.20 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 75.69 μs (74.99 μs .. 76.51 μs)
std dev 2.453 μs (2.093 μs .. 3.071 μs)
variance introduced by outliers: 32% (moderately inflated)
benchmarking binary-parser/example
time 59.48 μs (58.77 μs .. 60.25 μs)
0.998 R² (0.997 R² .. 0.999 R²)
mean 60.26 μs (59.42 μs .. 61.33 μs)
std dev 3.214 μs (2.459 μs .. 4.060 μs)
variance introduced by outliers: 58% (severely inflated)
benchmarking attoparsec/lazy-bytestring/example
time 78.84 μs (77.75 μs .. 80.17 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 78.02 μs (77.28 μs .. 78.89 μs)
std dev 2.683 μs (2.172 μs .. 3.398 μs)
variance introduced by outliers: 35% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/example
time 59.20 μs (58.64 μs .. 59.79 μs)
0.999 R² (0.997 R² .. 0.999 R²)
mean 59.23 μs (58.52 μs .. 60.08 μs)
std dev 2.558 μs (1.963 μs .. 3.353 μs)
variance introduced by outliers: 47% (moderately inflated)
benchmarking attoparsec/geometry
time 3.366 ms (3.323 ms .. 3.416 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 3.427 ms (3.398 ms .. 3.466 ms)
std dev 107.4 μs (80.60 μs .. 162.5 μs)
variance introduced by outliers: 16% (moderately inflated)
benchmarking binary-parser/geometry
time 2.604 ms (2.572 ms .. 2.635 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 2.619 ms (2.595 ms .. 2.645 ms)
std dev 79.33 μs (63.44 μs .. 102.1 μs)
variance introduced by outliers: 15% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/geometry
time 3.492 ms (3.420 ms .. 3.565 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 3.440 ms (3.411 ms .. 3.468 ms)
std dev 96.20 μs (82.36 μs .. 114.1 μs)
variance introduced by outliers: 12% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/geometry
time 2.670 ms (2.633 ms .. 2.698 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 2.647 ms (2.623 ms .. 2.674 ms)
std dev 84.02 μs (68.69 μs .. 104.0 μs)
variance introduced by outliers: 16% (moderately inflated)
benchmarking attoparsec/integers
time 304.8 μs (301.6 μs .. 308.5 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 306.9 μs (304.2 μs .. 311.4 μs)
std dev 11.48 μs (8.233 μs .. 19.62 μs)
variance introduced by outliers: 33% (moderately inflated)
benchmarking binary-parser/integers
time 212.2 μs (200.8 μs .. 235.2 μs)
0.971 R² (0.940 R² .. 0.999 R²)
mean 206.9 μs (203.5 μs .. 218.2 μs)
std dev 18.14 μs (6.445 μs .. 39.25 μs)
variance introduced by outliers: 75% (severely inflated)
benchmarking attoparsec/lazy-bytestring/integers
time 311.6 μs (308.6 μs .. 316.6 μs)
0.998 R² (0.995 R² .. 0.999 R²)
mean 311.2 μs (307.7 μs .. 315.7 μs)
std dev 13.30 μs (9.673 μs .. 17.54 μs)
variance introduced by outliers: 39% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/integers
time 201.3 μs (198.6 μs .. 203.8 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 203.0 μs (201.3 μs .. 204.8 μs)
std dev 5.859 μs (4.853 μs .. 7.421 μs)
variance introduced by outliers: 24% (moderately inflated)
benchmarking attoparsec/jp10
time 500.6 μs (489.3 μs .. 513.9 μs)
0.997 R² (0.996 R² .. 0.998 R²)
mean 498.7 μs (493.5 μs .. 504.2 μs)
std dev 18.67 μs (15.01 μs .. 23.11 μs)
variance introduced by outliers: 31% (moderately inflated)
benchmarking binary-parser/jp10
time 467.6 μs (462.5 μs .. 473.7 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 470.5 μs (466.4 μs .. 475.8 μs)
std dev 15.54 μs (12.46 μs .. 19.79 μs)
variance introduced by outliers: 26% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/jp10
time 491.5 μs (485.0 μs .. 497.6 μs)
0.998 R² (0.998 R² .. 0.999 R²)
mean 493.7 μs (488.3 μs .. 500.1 μs)
std dev 19.88 μs (15.55 μs .. 29.45 μs)
variance introduced by outliers: 34% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/jp10
time 499.3 μs (461.5 μs .. 590.2 μs)
0.856 R² (0.723 R² .. 0.999 R²)
mean 486.9 μs (467.1 μs .. 565.2 μs)
std dev 120.4 μs (12.86 μs .. 252.7 μs)
variance introduced by outliers: 96% (severely inflated)
benchmarking attoparsec/jp100
time 3.023 ms (2.989 ms .. 3.059 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 3.079 ms (3.045 ms .. 3.120 ms)
std dev 122.8 μs (88.92 μs .. 187.5 μs)
variance introduced by outliers: 23% (moderately inflated)
benchmarking binary-parser/jp100
time 2.795 ms (2.762 ms .. 2.828 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 2.790 ms (2.765 ms .. 2.816 ms)
std dev 83.75 μs (65.15 μs .. 108.6 μs)
variance introduced by outliers: 15% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/jp100
time 3.145 ms (3.094 ms .. 3.199 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 3.117 ms (3.089 ms .. 3.147 ms)
std dev 94.41 μs (77.22 μs .. 119.1 μs)
variance introduced by outliers: 15% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/jp100
time 2.761 ms (2.724 ms .. 2.798 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 2.756 ms (2.735 ms .. 2.782 ms)
std dev 70.93 μs (57.46 μs .. 94.99 μs)
variance introduced by outliers: 11% (moderately inflated)
benchmarking attoparsec/jp50
time 1.634 ms (1.617 ms .. 1.654 ms)
0.997 R² (0.993 R² .. 0.999 R²)
mean 1.629 ms (1.608 ms .. 1.659 ms)
std dev 82.30 μs (55.08 μs .. 123.1 μs)
variance introduced by outliers: 36% (moderately inflated)
benchmarking binary-parser/jp50
time 1.552 ms (1.464 ms .. 1.739 ms)
0.879 R² (0.730 R² .. 0.999 R²)
mean 1.509 ms (1.449 ms .. 1.742 ms)
std dev 344.4 μs (52.96 μs .. 710.0 μs)
variance introduced by outliers: 93% (severely inflated)
benchmarking attoparsec/lazy-bytestring/jp50
time 1.668 ms (1.649 ms .. 1.692 ms)
0.998 R² (0.998 R² .. 0.999 R²)
mean 1.693 ms (1.678 ms .. 1.713 ms)
std dev 59.58 μs (49.87 μs .. 72.55 μs)
variance introduced by outliers: 22% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/jp50
time 1.471 ms (1.449 ms .. 1.497 ms)
0.998 R² (0.996 R² .. 0.999 R²)
mean 1.471 ms (1.455 ms .. 1.494 ms)
std dev 64.25 μs (47.02 μs .. 95.22 μs)
variance introduced by outliers: 30% (moderately inflated)
benchmarking attoparsec/numbers
time 563.8 μs (557.0 μs .. 569.9 μs)
0.998 R² (0.997 R² .. 0.999 R²)
mean 562.5 μs (556.8 μs .. 569.2 μs)
std dev 20.30 μs (15.46 μs .. 31.17 μs)
variance introduced by outliers: 28% (moderately inflated)
benchmarking binary-parser/numbers
time 376.8 μs (373.2 μs .. 380.7 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 380.4 μs (377.2 μs .. 383.7 μs)
std dev 10.72 μs (8.971 μs .. 14.59 μs)
variance introduced by outliers: 21% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/numbers
time 559.7 μs (553.9 μs .. 566.1 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 562.2 μs (556.1 μs .. 568.5 μs)
std dev 20.69 μs (16.75 μs .. 26.22 μs)
variance introduced by outliers: 29% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/numbers
time 385.9 μs (378.3 μs .. 399.4 μs)
0.941 R² (0.847 R² .. 0.999 R²)
mean 405.0 μs (383.5 μs .. 480.0 μs)
std dev 116.0 μs (14.13 μs .. 230.5 μs)
variance introduced by outliers: 98% (severely inflated)
benchmarking attoparsec/twitter1
time 24.99 μs (24.71 μs .. 25.24 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 25.12 μs (24.87 μs .. 25.45 μs)
std dev 973.2 ns (772.2 ns .. 1.293 μs)
variance introduced by outliers: 45% (moderately inflated)
benchmarking binary-parser/twitter1
time 18.89 μs (18.63 μs .. 19.17 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 18.84 μs (18.67 μs .. 19.07 μs)
std dev 665.9 ns (527.6 ns .. 870.2 ns)
variance introduced by outliers: 41% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/twitter1
time 24.80 μs (24.40 μs .. 25.23 μs)
0.998 R² (0.997 R² .. 0.999 R²)
mean 24.98 μs (24.67 μs .. 25.40 μs)
std dev 1.165 μs (879.9 ns .. 1.845 μs)
variance introduced by outliers: 54% (severely inflated)
benchmarking binary-parser/lazy-bytestring/twitter1
time 19.14 μs (18.95 μs .. 19.33 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 19.13 μs (18.95 μs .. 19.34 μs)
std dev 654.4 ns (531.6 ns .. 864.0 ns)
variance introduced by outliers: 40% (moderately inflated)
benchmarking attoparsec/twitter10
time 177.8 μs (176.8 μs .. 179.1 μs)
0.999 R² (0.999 R² .. 1.000 R²)
mean 179.5 μs (178.1 μs .. 181.6 μs)
std dev 5.936 μs (4.418 μs .. 8.262 μs)
variance introduced by outliers: 30% (moderately inflated)
benchmarking binary-parser/twitter10
time 141.9 μs (138.5 μs .. 144.4 μs)
0.923 R² (0.753 R² .. 0.999 R²)
mean 168.6 μs (144.3 μs .. 252.2 μs)
std dev 133.9 μs (7.126 μs .. 276.1 μs)
variance introduced by outliers: 99% (severely inflated)
benchmarking attoparsec/lazy-bytestring/twitter10
time 174.4 μs (172.2 μs .. 176.9 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 176.3 μs (174.6 μs .. 178.7 μs)
std dev 6.816 μs (5.259 μs .. 9.747 μs)
variance introduced by outliers: 37% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/twitter10
time 140.9 μs (139.7 μs .. 142.1 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 141.9 μs (140.4 μs .. 143.3 μs)
std dev 4.869 μs (3.996 μs .. 6.329 μs)
variance introduced by outliers: 32% (moderately inflated)
benchmarking attoparsec/twitter100
time 2.316 ms (2.278 ms .. 2.348 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 2.311 ms (2.288 ms .. 2.340 ms)
std dev 86.80 μs (68.60 μs .. 125.5 μs)
variance introduced by outliers: 23% (moderately inflated)
benchmarking binary-parser/twitter100
time 2.066 ms (2.037 ms .. 2.097 ms)
0.998 R² (0.996 R² .. 0.999 R²)
mean 2.117 ms (2.089 ms .. 2.149 ms)
std dev 101.3 μs (82.59 μs .. 122.3 μs)
variance introduced by outliers: 33% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/twitter100
time 2.596 ms (2.301 ms .. 3.072 ms)
0.921 R² (0.882 R² .. 0.998 R²)
mean 2.415 ms (2.370 ms .. 2.581 ms)
std dev 255.4 μs (74.33 μs .. 511.0 μs)
variance introduced by outliers: 69% (severely inflated)
benchmarking binary-parser/lazy-bytestring/twitter100
time 2.070 ms (2.037 ms .. 2.103 ms)
0.997 R² (0.995 R² .. 0.998 R²)
mean 2.084 ms (2.060 ms .. 2.111 ms)
std dev 85.16 μs (68.84 μs .. 109.8 μs)
variance introduced by outliers: 27% (moderately inflated)
benchmarking attoparsec/twitter20
time 377.1 μs (372.9 μs .. 382.8 μs)
0.998 R² (0.998 R² .. 0.999 R²)
mean 379.3 μs (375.7 μs .. 383.0 μs)
std dev 12.74 μs (10.89 μs .. 16.09 μs)
variance introduced by outliers: 28% (moderately inflated)
benchmarking binary-parser/twitter20
time 336.0 μs (332.3 μs .. 339.5 μs)
0.998 R² (0.998 R² .. 0.999 R²)
mean 329.5 μs (325.6 μs .. 333.5 μs)
std dev 13.34 μs (11.36 μs .. 15.62 μs)
variance introduced by outliers: 36% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/twitter20
time 378.6 μs (375.4 μs .. 382.0 μs)
0.999 R² (0.998 R² .. 0.999 R²)
mean 379.0 μs (375.5 μs .. 383.1 μs)
std dev 11.67 μs (9.355 μs .. 15.51 μs)
variance introduced by outliers: 24% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/twitter20
time 320.5 μs (315.1 μs .. 327.5 μs)
0.998 R² (0.995 R² .. 0.999 R²)
mean 320.7 μs (317.6 μs .. 324.9 μs)
std dev 11.79 μs (8.713 μs .. 16.30 μs)
variance introduced by outliers: 32% (moderately inflated)
benchmarking attoparsec/twitter50
time 1.251 ms (1.118 ms .. 1.536 ms)
0.850 R² (0.749 R² .. 0.999 R²)
mean 1.187 ms (1.146 ms .. 1.299 ms)
std dev 233.9 μs (41.99 μs .. 447.0 μs)
variance introduced by outliers: 92% (severely inflated)
benchmarking binary-parser/twitter50
time 1.025 ms (1.012 ms .. 1.039 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 1.028 ms (1.019 ms .. 1.039 ms)
std dev 32.69 μs (24.30 μs .. 43.61 μs)
variance introduced by outliers: 20% (moderately inflated)
benchmarking attoparsec/lazy-bytestring/twitter50
time 1.113 ms (1.100 ms .. 1.127 ms)
0.999 R² (0.998 R² .. 0.999 R²)
mean 1.127 ms (1.117 ms .. 1.139 ms)
std dev 35.76 μs (28.73 μs .. 47.10 μs)
variance introduced by outliers: 21% (moderately inflated)
benchmarking binary-parser/lazy-bytestring/twitter50
time 1.055 ms (1.039 ms .. 1.071 ms)
0.998 R² (0.997 R² .. 0.999 R²)
mean 1.042 ms (1.032 ms .. 1.055 ms)
std dev 36.88 μs (28.99 μs .. 54.81 μs)
variance introduced by outliers: 25% (moderately inflated)