From 84ee16536eabd4f637912d25643184cbcc118092 Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Thu, 19 Jan 2023 11:52:19 +0800 Subject: Parse arguments with optparse-applicative --- Main.hs | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/Main.hs b/Main.hs index 1244051..1b4996f 100644 --- a/Main.hs +++ b/Main.hs @@ -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 () -- cgit v1.2.3