@hackage mutable-containers0.1.2.0

Abstactions and concrete implementations of mutable containers

This package provides common mutable containers, such as double-ended queues and doubly-linked lists. It is implemented as both an abstract set of type classes, and concrete implementations.

Note that this library should be considered extremely experimental. That said, it currently has 100% test coverage and has some performance tuning, though the API is expected to change significantly.

Benchmark results

The following benchmarks were performed on January 4, 2015, against version 0.1.1.0.

Deque benchmark

benchmarking IORef [Int]
time                 8.355 ms   (8.350 ms .. 8.362 ms)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 8.353 ms   (8.348 ms .. 8.358 ms)
std dev              15.89 μs   (11.83 μs .. 23.66 μs)

benchmarking IORef (Seq Int)
time                 140.5 μs   (140.4 μs .. 140.6 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 140.5 μs   (140.4 μs .. 140.6 μs)
std dev              313.3 ns   (239.0 ns .. 404.1 ns)

benchmarking UDeque
time                 101.2 μs   (101.2 μs .. 101.2 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 101.2 μs   (101.2 μs .. 101.2 μs)
std dev              16.11 ns   (13.38 ns .. 21.34 ns)

benchmarking SDeque
time                 97.86 μs   (97.85 μs .. 97.88 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 97.88 μs   (97.87 μs .. 97.89 μs)
std dev              38.61 ns   (31.34 ns .. 50.52 ns)

benchmarking BDeque
time                 113.7 μs   (113.7 μs .. 113.7 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 113.7 μs   (113.7 μs .. 113.7 μs)
std dev              29.87 ns   (22.98 ns .. 39.57 ns)

benchmarking DList
time                 160.8 μs   (160.7 μs .. 160.9 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 160.9 μs   (160.8 μs .. 161.0 μs)
std dev              331.8 ns   (277.0 ns .. 401.2 ns)

Ref benchmark

benchmarking IORef
time                 4.321 μs   (4.320 μs .. 4.322 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 4.322 μs   (4.321 μs .. 4.323 μs)
std dev              4.840 ns   (3.746 ns .. 6.242 ns)

benchmarking STRef
time                 4.481 μs   (4.480 μs .. 4.481 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 4.481 μs   (4.481 μs .. 4.481 μs)
std dev              1.127 ns   (805.5 ps .. 1.758 ns)

benchmarking MutVar
time                 4.478 μs   (4.476 μs .. 4.481 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 4.479 μs   (4.477 μs .. 4.481 μs)
std dev              6.500 ns   (5.199 ns .. 8.246 ns)

benchmarking URef
time                 2.019 μs   (2.019 μs .. 2.020 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 2.020 μs   (2.019 μs .. 2.020 μs)
std dev              471.2 ps   (371.2 ps .. 671.9 ps)

benchmarking SRef
time                 2.175 μs   (2.174 μs .. 2.176 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 2.172 μs   (2.170 μs .. 2.173 μs)
std dev              5.106 ns   (4.054 ns .. 6.660 ns)

benchmarking VRef
time                 4.280 μs   (4.279 μs .. 4.280 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 4.281 μs   (4.280 μs .. 4.283 μs)
std dev              4.552 ns   (1.911 ns .. 8.892 ns)