Skip to content

A haskell library for principled, cross-platform & extensible hashing of types, including an implementation of the FNV-1a algorithm. (DEVELOPMENT STALLED; Hashable NEEDS TO BE PREFIX CODE)

License

Notifications You must be signed in to change notification settings

jberryman/hashabler

Repository files navigation

Hashabler Build Status

This is a haskell library for principled, cross-platform & extensible hashing of data and types, which includes an implementation of the FNV-1a and SipHash algorithms. It 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, for instance if one needed more hash bits

  • Honest hashing of values, and principled hashing of algebraic data types (see e.g. hashable issues 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. We provide an implementation of a simple hashing algorithm (FNV-1a) and make an effort define Hashable instances in a way that is well-documented and sensible, so that e.g. one can (hopefully) easily implement string hashing routine in JavaScript that will match the way we hash strings here.

It is available on hackage, and can be installed with:

cabal install hashabler

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.

About

A haskell library for principled, cross-platform & extensible hashing of types, including an implementation of the FNV-1a algorithm. (DEVELOPMENT STALLED; Hashable NEEDS TO BE PREFIX CODE)

Resources

License

Stars

Watchers

Forks

Packages

No packages published