packages feed

bloomfilter-blocked-0.1.0.0: examples/spell.hs

{-# LANGUAGE BangPatterns #-}
module Main (main) where

import           Control.Monad (forM_, unless, when)
import           System.Directory
import           System.Environment (getArgs)
import           System.Exit

import qualified Data.BloomFilter as B

main :: IO ()
main = do
    files <- getArgs
    when (null files) $ do
      putStrLn "No files to spell"
      exitSuccess
    putStrLn $ "Spelling files: " ++ show files
    hasDictionary <- doesFileExist "/usr/share/dict/words"
    unless hasDictionary $ do
      putStrLn "No dictionary found"
      exitSuccess
    dictionary <- readFile "/usr/share/dict/words"
    let !bloom = B.fromList (B.policyForFPR 0.01) bSalt (words dictionary)
    forM_ files $ \file ->
          putStrLn . unlines . filter (`B.notElem` bloom) . words
      =<< readFile file

bSalt :: B.Salt
bSalt = 4