#ifdef TRUST
#endif
module Language.Words (allWords, allStringWords) where
import           Data.Text (Text)
import qualified Data.Text         as T
import qualified Data.Text.Lazy    as LT
import qualified Data.Text.Lazy.IO as LT
import           System.Directory
import           System.IO
import           System.IO.Unsafe
import           Paths_words
allWords :: [Text]
allWords = unsafePerformIO wordsIO
allStringWords :: [String]
allStringWords = unsafePerformIO stringWordsIO
wordsIO :: IO [Text]
wordsIO = withWordsFile $
    fmap (dropWhile T.null . map (T.concat . LT.toChunks) . LT.lines)
    . LT.hGetContents
stringWordsIO :: IO [String]
stringWordsIO = withWordsFile $ fmap (dropWhile null . lines) . hGetContents
withWordsFile k = do
    f <- findWordsFile
    h <- openFile f ReadMode
    k h
findWordsFile = do
    files <- getWordsFiles
    lookForWords files
getWordsFiles = do
    builtin <- getDataFileName "words"
    return [ "/usr/share/dict/words", "/usr/dict/words", builtin ]
lookForWords (f:fs) = do
    success <- doesFileExist f
    if success then return f else lookForWords fs
lookForWords [] = error "words: Can't find words file; even tried built-in!"