BSD-3-Clause licensed by Johan Tibell
This version can be pinned in stack with:unordered-containers-0.2.20@sha256:5a3e730fb548640f2ec050ec7517af67deede21de51e32bbebf6b7b222e6d0f5,3921

Efficient hashing-based container types. The containers have been optimized for performance critical use, both in terms of large data quantities and high speed.

The declared cost of each operation is either worst-case or amortized, but remains valid even if structures are shared.


This package currently provides no defenses against hash collision attacks such as HashDoS. Users who need to store input from untrusted sources are advised to use Data.Map or Data.Set from the containers package instead.


[0.2.20] - January 2024 – April 2022 – April 2022

  • Add HashMap.isSubmapOf[By] and HashSet.isSubsetOf. Thanks Sven Keidel. (#282)

  • Expose internal modules. (#283)

  • Documentation improvements in Data.HashSet, including a beginner-friendly introduction. Thanks Matt Renaud. (#267)

  • HashMap.alterF: Skip key deletion for absent keys. (#288)

  • Remove custom unsafeShift{L,R} definitions. (#281)

  • Various other documentation improvements.

  • Add HashMap.findWithDefault (soft-deprecates HashMap.lookupDefault). Thanks, Matt Renaud.

  • Add HashMap.fromListWithKey. Thanks, Josef Svenningsson.

  • Add more folding functions and use them in Foldable instances. Thanks, David Feuer.

  • Add HashMap.!?, a flipped version of lookup. Thanks, Matt Renaud.

  • Add a Bifoldable instance for HashMap. Thanks, Joseph Sible.

  • Add a HasCallStack constraint to (!). Thanks, Roman Cheplyaka.

Bug fixes

  • Fix a space leak affecting updates on keys with hash collisions. Thanks, Neil Mitchell. (#254)

  • Get rid of some silly thunks that could be left lying around. (#232). Thanks, David Feuer.

Other changes

  • Speed up the Hashable instances for HashMap and HashSet. Thanks, Edward Amsden.

  • Remove a dependency cycle hack from the benchmark suite. Thanks, Andrew Martin.

  • Improve documentation. Thanks, Tristan McLeay, Li-yao Xia, Gareth Smith, Simon Jakobi, Sergey Vinokurov, and likely others.

  • Add HashMap.alterF.

  • Add HashMap.keysSet.

  • Make HashMap.Strict.traverseWithKey force the results before installing them in the map.

  • Add Ord/Ord1/Ord2 instances. (Thanks, Oleg Grenrus)

  • Use SmallArray# instead of Array# for GHC versions 7.10 and above. (Thanks, Dmitry Ivanov)

  • Adjust for Semigroup => Monoid proposal implementation. (Thanks, Ryan Scott)

Bug fixes

  • Fix a strictness bug in fromListWith.

  • Enable eager blackholing for pre-8.2 GHC versions to work around a runtime system bug. (Thanks, Ben Gamari)

  • Avoid sketchy reimplementation of ST when compiling with recent GHC.

Other changes

  • Remove support for GHC versions before 7.8. (Thanks, Dmitry Ivanov)

  • Add internal documentaton. (Thanks, Johan Tibell)

  • Add Eq1/2, Show1/2, Read1 instances with base-4.9

  • Eq (HashSet a) doesn’t require Hashable a anymore, only Eq a.

  • Add Hashable1/2 with hashable-

  • Add differenceWith function.

  • Don’t use -fregs-graphs

  • Fix benchmark compilation on stack.

  • Fix linker error related to popcnt.

  • Haddock improvements.

  • Fix benchmark compilation when downloaded from Hackage.

  • Support criterion 1.1

  • Add unionWithKey for hash maps.

  • Mark several modules as Trustworthy.

  • Add Hashable instances for HashMap and HashSet.

  • Add mapMaybe, mapMaybeWithKey, update, alter, and intersectionWithKey.

  • Add roles.

  • Add Hashable and Semigroup instances. (2014-10-11)

  • Support base-4.8