#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!"