binary-parsers

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
.
Building
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
Benchmark
start benchmark http request parser
benchmarking http-req/attoparsec
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.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 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.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.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.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 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 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.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.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.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.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 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 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 2.961 μs (2.935 μs .. 2.987 μs)
0.999 R² (0.999 R² .. 1.000 R²)
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 74.67 μs (73.57 μs .. 75.75 μs)
0.998 R² (0.998 R² .. 0.999 R²)
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 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 78.02 μs (77.31 μs .. 78.81 μs)
0.999 R² (0.998 R² .. 0.999 R²)
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 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.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.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.296 ms (3.240 ms .. 3.357 ms)
0.998 R² (0.997 R² .. 0.999 R²)
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.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 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 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 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 206.4 μs (203.0 μs .. 210.2 μs)
0.998 R² (0.998 R² .. 0.999 R²)
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 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 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 488.0 μs (480.6 μs .. 493.8 μs)
0.999 R² (0.998 R² .. 0.999 R²)
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 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.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.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.005 ms (2.964 ms .. 3.051 ms)
0.998 R² (0.996 R² .. 0.999 R²)
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.760 ms (2.724 ms .. 2.797 ms)
0.998 R² (0.997 R² .. 0.999 R²)
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.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.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.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.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 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 365.3 μs (361.6 μs .. 369.2 μs)
0.999 R² (0.998 R² .. 0.999 R²)
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 550.6 μs (545.9 μs .. 554.0 μs)
0.999 R² (0.998 R² .. 0.999 R²)
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 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 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 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 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 18.27 μs (18.11 μs .. 18.45 μs)
0.999 R² (0.999 R² .. 0.999 R²)
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 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 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 172.6 μs (171.0 μs .. 174.1 μs)
0.999 R² (0.998 R² .. 0.999 R²)
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 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.273 ms (2.236 ms .. 2.301 ms)
0.998 R² (0.997 R² .. 0.999 R²)
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 2.035 ms (2.007 ms .. 2.059 ms)
0.998 R² (0.997 R² .. 0.999 R²)
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.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 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 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 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 375.3 μs (372.2 μs .. 377.7 μs)
0.999 R² (0.999 R² .. 0.999 R²)
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 333.5 μs (330.7 μs .. 336.2 μs)
0.999 R² (0.998 R² .. 0.999 R²)
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.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 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.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 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