Hashing typeclass definition and its instances for basic types. Implements fast non-cryptographic hashing for arbitrary types, suitable for implementing generic hashing-based datastructures, like hash-tables and hash-sets.
Much inspired by the "hashable" Haskell library.
Construct from just the hashing function.
Construct from just the hashing function, which combines the hash with salt.
Map over the owner type of an instance to produce a new instance.
Please notice that mapping is contravariant (i.e., (b -> a) instead of (a -> b)).
Compose multiple instances together.
Allows to create instances for product types (records). E.g.,
type alias Person = { name : String, age : Int }
hashing : Hashing Person
hashing =
Hashing.concat
[
Hashing.map .name (Hashing.string 4),
Hashing.map .age Hashing.int
]Instance for Bool.
Instance for Int.
Instance for Float.
Instance for Char.
Hashing instance for strings, determined by sampling. Sampling determines the maximum amount of characters to be picked from the string while constructing the hash, allowing you to control the balance between the quality of hashing and its performance.
Instance for List, which utilizes an instance for its element.
Traverses the list in whole.
Hashing instance for arrays, determined by the Hashing instance for elements and sampling. Sampling determines the maximum amount of elements to be picked from the array while constructing the hash, allowing you to control the balance between the quality of hashing and its performance.
Explicit typeclass which implements hashing for type
a.