-- | Hangman: a word guessing game -- Functional Programming course 2017. -- Thomas Hallgren {- This started as a skeleton, the definitions were filled in during the lecture. -} import System.Random(randomRIO) import Data.List(nub) main = do word <- getRandomWord play word [] getRandomWord :: IO String getRandomWord = do s <- readFile "/usr/share/dict/words" let ws = lines s i <- randomRIO (0,length ws-1) return (ws !! i) play :: String -> String -> IO () play word guesses = do putStr [if c `elem` guesses then c else '_' | c<-word] putStrLn (" guesses left: "++show guessesLeft) if all (`elem` guesses) word then putStrLn "You win!" else if guessesLeft <= 0 then do putStrLn "Sorry, you lost!" putStrLn ("The word was: "++word) else do putStrLn "Enter your guess:" s <- getLine play word (s++guesses) where guessesLeft = length word + 4 - length guesses