Copyright | Bryan O'Sullivan |
---|---|
License | BSD3 |
Maintainer | Bryan O'Sullivan <bos@serpentine.com> |
Stability | unstable |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Data.BloomFilter.Hash
Description
Fast hashing of Haskell values. The hash functions used are Bob Jenkins's public domain functions, which combine high performance with excellent mixing properties. For more details, see http://burtleburtle.net/bob/hash/.
In addition to the usual "one input, one output" hash functions, this module provides multi-output hash functions, suitable for use in applications that need multiple hashes, such as Bloom filtering.
Synopsis
- class Hashable a where
- hash32 :: Hashable a => a -> Word32
- hash64 :: Hashable a => a -> Word64
- hashSalt32 :: Hashable a => Word32 -> a -> Word32
- hashSalt64 :: Hashable a => Word64 -> a -> Word64
- hashes :: Hashable a => Int -> a -> [Word32]
- cheapHashes :: Hashable a => Int -> a -> [Word32]
- hashOne32 :: Storable a => a -> Word32 -> IO Word32
- hashOne64 :: Storable a => a -> Word64 -> IO Word64
- hashList32 :: Storable a => [a] -> Word32 -> IO Word32
- hashList64 :: Storable a => [a] -> Word64 -> IO Word64
Basic hash functionality
Minimal complete definition
Methods
Compute a 32-bit hash of a value. The salt value perturbs the result.
Compute a 64-bit hash of a value. The first salt value perturbs the first element of the result, and the second salt perturbs the second.
Instances
Hashable ByteString # | |
Defined in Data.BloomFilter.Hash | |
Hashable ByteString # | |
Defined in Data.BloomFilter.Hash | |
Hashable Int16 # | |
Hashable Int32 # | |
Hashable Int64 # | |
Hashable Int8 # | |
Hashable Word16 # | |
Hashable Word32 # | |
Hashable Word64 # | |
Hashable Word8 # | |
Hashable Ordering # | |
Hashable Integer # | |
Hashable () # | |
Hashable Bool # | |
Hashable Char # | |
Hashable Double # | |
Hashable Float # | |
Hashable Int # | |
Hashable a => Hashable (Maybe a) # | |
Storable a => Hashable [a] # | |
(Hashable a, Hashable b) => Hashable (Either a b) # | |
(Hashable a, Hashable b) => Hashable (a, b) # | |
(Hashable a, Hashable b, Hashable c) => Hashable (a, b, c) # | |
(Hashable a, Hashable b, Hashable c, Hashable d) => Hashable (a, b, c, d) # | |
(Hashable a, Hashable b, Hashable c, Hashable d, Hashable e) => Hashable (a, b, c, d, e) # | |
Compute a salted 32-bit hash.
Compute a salted 64-bit hash.
Compute a family of hash values
Compute a list of 32-bit hashes. The value to hash may be inspected as many times as there are hashes requested.
Compute a list of 32-bit hashes relatively cheaply. The value to hash is inspected at most twice, regardless of the number of hashes requested.
We use a variant of Kirsch and Mitzenmacher's technique from "Less Hashing, Same Performance: Building a Better Bloom Filter", http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf.
Where Kirsch and Mitzenmacher multiply the second hash by a coefficient, we shift right by the coefficient. This offers better performance (as a shift is much cheaper than a multiply), and the low order bits of the final hash stay well mixed.