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) ```