bloomfilter-2.0.1.2: Pure and impure Bloom Filter implementations.
CopyrightBryan O'Sullivan
LicenseBSD3
MaintainerBryan O'Sullivan <bos@serpentine.com>
Stabilityunstable
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

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

Basic hash functionality

class Hashable a where #

Minimal complete definition

hashIO32

Methods

hashIO32 #

Arguments

:: a

value to hash

-> Word32

salt

-> IO Word32 

Compute a 32-bit hash of a value. The salt value perturbs the result.

hashIO64 #

Arguments

:: a

value to hash

-> Word64

salt

-> IO Word64 

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

Instances details
Hashable Int16 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Int32 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Int64 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Int8 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Word16 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Word32 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Word64 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Word8 # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable ByteString # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable ByteString # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Ordering # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Integer # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable () # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: () -> Word32 -> IO Word32 #

hashIO64 :: () -> Word64 -> IO Word64 #

Hashable Bool # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Char # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Double # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Float # 
Instance details

Defined in Data.BloomFilter.Hash

Hashable Int # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: Int -> Word32 -> IO Word32 #

hashIO64 :: Int -> Word64 -> IO Word64 #

Hashable a => Hashable (Maybe a) # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: Maybe a -> Word32 -> IO Word32 #

hashIO64 :: Maybe a -> Word64 -> IO Word64 #

Storable a => Hashable [a] # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: [a] -> Word32 -> IO Word32 #

hashIO64 :: [a] -> Word64 -> IO Word64 #

(Hashable a, Hashable b) => Hashable (Either a b) # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: Either a b -> Word32 -> IO Word32 #

hashIO64 :: Either a b -> Word64 -> IO Word64 #

(Hashable a, Hashable b) => Hashable (a, b) # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: (a, b) -> Word32 -> IO Word32 #

hashIO64 :: (a, b) -> Word64 -> IO Word64 #

(Hashable a, Hashable b, Hashable c) => Hashable (a, b, c) # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: (a, b, c) -> Word32 -> IO Word32 #

hashIO64 :: (a, b, c) -> Word64 -> IO Word64 #

(Hashable a, Hashable b, Hashable c, Hashable d) => Hashable (a, b, c, d) # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: (a, b, c, d) -> Word32 -> IO Word32 #

hashIO64 :: (a, b, c, d) -> Word64 -> IO Word64 #

(Hashable a, Hashable b, Hashable c, Hashable d, Hashable e) => Hashable (a, b, c, d, e) # 
Instance details

Defined in Data.BloomFilter.Hash

Methods

hashIO32 :: (a, b, c, d, e) -> Word32 -> IO Word32 #

hashIO64 :: (a, b, c, d, e) -> Word64 -> IO Word64 #

hash32 :: Hashable a => a -> Word32 #

Compute a 32-bit hash.

hash64 :: Hashable a => a -> Word64 #

hashSalt32 #

Arguments

:: Hashable a 
=> Word32

salt

-> a

value to hash

-> Word32 

Compute a salted 32-bit hash.

hashSalt64 #

Arguments

:: Hashable a 
=> Word64

salt

-> a

value to hash

-> Word64 

Compute a salted 64-bit hash.

Compute a family of hash values

hashes #

Arguments

:: Hashable a 
=> Int

number of hashes to compute

-> a

value to hash

-> [Word32] 

Compute a list of 32-bit hashes. The value to hash may be inspected as many times as there are hashes requested.

cheapHashes #

Arguments

:: Hashable a 
=> Int

number of hashes to compute

-> a

value to hash

-> [Word32] 

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.

Hash functions for Storable instances

hashOne32 :: Storable a => a -> Word32 -> IO Word32 #

Compute a 32-bit hash of a Storable instance.

hashOne64 :: Storable a => a -> Word64 -> IO Word64 #

Compute a 64-bit hash of a Storable instance.

hashList32 :: Storable a => [a] -> Word32 -> IO Word32 #

Compute a 32-bit hash of a list of Storable instances.

hashList64 :: Storable a => [a] -> Word64 -> IO Word64 #

Compute a 64-bit hash of a list of Storable instances.