Bloom Filter in Haskell
Instead of transforming everything to String using Show just for the purpose of hashing it, you should constraint element types to be Hashable instead:

getHashes :: Hashable a =&gt; BloomFilter -&gt; a -&gt; [Int]
getHashes bloomFilter elem =
  let seed    = hashSeed bloomFilter
      maxSize = m bloomFilter
  in  (`mod` maxSize) . abs . (`hashWithSalt` elem) . (seed +) &lt;$&gt; [1..(k bloomFilter)]


I'd also use maxSize and numFuns as the field names in BloomFilter and then use RecordWildCards:

getHashes :: Hashable a =&gt; BloomFilter -&gt; a -&gt; [Int]
getHashes BloomFilter{..} elem = map nthHash [1..numFuns]
  where
    nthHash n = abs (hashWithSalt (n + hashSeed) elem) `mod` maxSize 


Or maybe even nicer:

getHashes :: Hashable a =&gt; BloomFilter -&gt; a -&gt; [Int]
getHashes BloomFilter{..} elem = 
  [ abs (hashWithSalt (i + hashSeed) elem) `mod` maxSize  | i &lt;- [1..numFuns] ]