diff options
author | Frederick Yin <fkfd@fkfd.me> | 2023-01-19 11:52:19 +0800 |
---|---|---|
committer | Frederick Yin <fkfd@fkfd.me> | 2023-01-19 11:52:19 +0800 |
commit | 84ee16536eabd4f637912d25643184cbcc118092 (patch) | |
tree | 38a80b91e2d3e23dff13cdd7739e015dc4102f4f | |
parent | 018486dde08e85cd52d12bac845f0cc5d199e20c (diff) |
Parse arguments with optparse-applicative
-rw-r--r-- | Main.hs | 46 |
1 files changed, 39 insertions, 7 deletions
@@ -1,12 +1,44 @@ +import Options.Applicative import Game (Game(..), Setup(..), beginGame) +setup :: Parser Setup +setup = Setup + <$> option auto + ( short 'n' + <> long "player-number" + <> metavar "n" + <> value 4 + <> help "n players, n must be larger than 2 (default: 4)" + ) + <*> option auto + ( short 'r' + <> long "rounds" + <> metavar "r" + <> value 1 + <> help "play r rounds, r must be at least 1 (default: 1)" + ) + <*> option auto + ( short 'd' + <> long "decks" + <> metavar "d" + <> value 2 + <> help "use d decks 52 cards each, d must be at least 2 (default: 2)" + ) + <*> option auto + ( short 'c' + <> long "initial-cards" + <> metavar "c" + <> value 5 + <> help "deal c cards per player, c must be at least 2 (default: 5)" + ) + <*> switch + ( short 'a' + <> long "auto" + <> help "run in demo mode" + ) + main :: IO () main = do - let setup = Setup { playerN = 3 - , roundN = 3 - , deckN = 2 - , cardN = 6 - , autoMode = True - } - beginGame setup + let opts = info (setup <**> helper) (fullDesc <> progDesc "One Card") + beginGame =<< execParser opts return () |