/
getopts.hs
39 lines (33 loc) · 1.05 KB
/
getopts.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import System.Console.GetOpt
import System.Environment
data Dict = Duden | Dwds | Seznam deriving (Show)
data Action = Add | Download Dict | Verify deriving (Show)
flags =
[ Option
['d']
["download"]
(OptArg (Download . parseDict) "duden|dwds|seznam")
"Dictionary to download from"
, Option
['v']
["verify"]
(NoArg Verify)
"Anki database verification"
, Option
['a']
["add"]
(NoArg Add)
"Add downloaded pronunciation words to anki database"
]
parseDict d = case d of
(Just "duden") -> Duden
(Just "seznam") -> Seznam
_ -> Dwds
parseAndPrintArgs :: [String] -> IO ()
parseAndPrintArgs args =
case getOpt Permute flags args of
-- usually pattern machted on this tripple to differentiate valid / invalid combinations of cmd line args
everything@(parsedOptsList, nonOpts, errorList) -> print everything
main = do
getArgs >>= parseAndPrintArgs
putStrLn $ "\n And you can print usage message: " ++ usageInfo "bla" flags