packages feed

HangmanAscii-0.1.1.1: Main.hs

module Main where

import System.IO
import Text.Printf
import Options.Applicative
import Data.Semigroup ((<>))

import HangmanAscii.Game
import HangmanAscii.Database
import Paths_HangmanAscii


data Args = Args
  { dbfile :: String
  , skill :: String 
  , category :: String
  }


sample :: Parser Args
sample = Args
  <$> strOption 
    ( long "dbfile"
   <> help "Text file, one word per line"
   <> value ""
   <> metavar "FILENAME" )
  <*> strOption 
    ( long "skill"
   <> short 's'
   <> help "easy, medium, hard."
   <> showDefault
   <> value "medium"
   <> metavar "SKILL" )
  <*> strOption 
    ( long "category"
   <> short 'c'
   <> help ("Categories: all, " ++ conCat ++ ".")
   <> showDefault
   <> value "fruites"
   <> metavar "SKILL" )


parseArgs :: IO Args
parseArgs = execParser opts
  where
    opts = info (sample <**> helper) (progDesc "Hangman game")


loadWords :: String -> String -> IO [String]
loadWords "" category = return $ getWords category
loadWords fn _ = fmap lines $ readFile fn


getSkill :: String -> Skill
getSkill "easy" = Easy
getSkill "medium" = Medium
getSkill "hard" = Hard


main :: IO ()
main = parseArgs >>= go
  where 
    go :: Args -> IO ()
    go (Args dbfile skl category) = do
      words <- loadWords dbfile category
      printf "Total words: %d\r\n" (length words)
      hangman category words (getSkill skl)