@hackage hashabler1.2

Principled, portable & extensible hashing of data and types, including an implementation of the FNV-1a and SipHash algorithms.

  • Installation

  • Dependencies (9)

  • Dependents (2)

    @hackage/unagi-bloomfilter, @hackage/acme-everything
  • Package Flags

      integer-gmp
       (on by default)

      Are we using integer-gmp to provide fast Integer instances?

      dev
       (off by default)

      To build tests, executables and benchmarks do `configure -fdev --enable-tests` and run the built executables by hand (i.e. not with `cabal test` etc.; we put all our different executables in test-suite sections in order to hide their dependencies from hackage)

This package is a rewrite of the hashable library by Milan Straka and Johan Tibell, having the following goals:

  • Extensibility; it should be easy to implement a new hashing algorithm on any Hashable type; in this package we provide SipHash and FNV-1a.

  • Honest hashing of values, and principled hashing of algebraic data types (see e.g. hashable issues #74 and #30)

  • Cross-platform consistent hash values, with a versioning guarantee. Where possible we ensure morally identical data hashes to indentical values regardless of processor word size and endianness.

  • Make implementing identical hash routines in other languages as painless as possible. In addition to SipHash, we provide an implementation of a simple hashing algorithm (FNV-1a) and make an effort to define Hashable instances in a way that is well-documented and sensible, so that e.g. one can easily implement a string hashing routine in JavaScript that will match the way we hash strings here.

Versioning: Except for instances where we specifically note that we make no promise of consistency, changes to hash values (and consequently changes to StableHashable values, where applicable) entail a major version number bump.