nikita-volkov/typeclasses/1.3.0

NOTE: the latest version is 1.8.0

Typeclasses.Classes.Hashing

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.

Definition

type alias Hashing a =
{ hash : a -> Int
, hashWithSalt : Int -> a -> Int
}

Explicit typeclass which implements hashing for type a.

Construction utilities

hash : (a -> Int) -> Hashing a

Construct from just the hashing function.

hashWithSalt : (Int -> a -> Int) -> Hashing a

Construct from just the hashing function, which combines the hash with salt.

Instance transformation utilities

map : (b -> a) -> Hashing a -> Hashing b

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

Instances

int : Hashing Int

Instance for Int.

list : Hashing a -> Hashing (List a)

Instance for List, which utilizes an instance for its element. Traverses the list in whole.

array : Hashing a -> Int -> Hashing (Array a)

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.

string : Int -> Hashing String

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.