Pass only the tail of the argv to operations
[hdata.git] / hdata.hs
blob7a49fb74f620c679f099401d2afe56a77157ee35
1 import System.Environment
3 progName = "hdata"
4 progVersion = "0.0"
6 data Operation = Add
7 | Bookmark
8 | Citation
9 | Help
10 | Modify
11 | Remove
12 | Search
13 | View
14 | Version
15 deriving (Show)
17 usage :: Operation -> String
19 usage Help = "usage: " ++ progName ++ " [operation] [id]\n\
20 \operations:\n\
21 \ add <filters> \n\
22 \ bookmark [options] [id]\n\
23 \ citation [options] [id]\n\
24 \ help [operation] \n\
25 \ modify [options] <filters> <id>\n\
26 \ remove [options] <id>\n\
27 \ search [options] [filters] [id]\n\
28 \ view [options] <id>\n\
29 \ version\n"
31 usage op = show op ++ " not yet implemented"
33 parseArgs :: [String] -> Either String Operation
34 parseArgs [] = Left $ "No operation specified ('" ++ progName ++ " help' for help)"
35 parseArgs xs = parseArg $ head xs
37 parseArg :: String -> Either String Operation
38 parseArg op = case op of
39 "add" -> Right Add
40 "bookmark" -> Right Bookmark
41 "citation" -> Right Citation
42 "help" -> Right Help
43 "-h" -> Right Help
44 "--help" -> Right Help
45 "modify" -> Right Modify
46 "remove" -> Right Remove
47 "search" -> Right Search
48 "view" -> Right View
49 "version" -> Right Version
50 _ -> Left $ "Invalid argument: " ++ op
52 add :: [String] -> IO ()
53 add argv = putStrLn $ usage Add
55 bookmark :: [String] -> IO ()
56 bookmark argv = putStrLn $ usage Bookmark
58 citation :: [String] -> IO ()
59 citation argv = putStrLn $ usage Citation
61 help :: [String] -> IO ()
62 help argv = putStrLn $ usage Help
64 modify :: [String] -> IO ()
65 modify argv = putStrLn $ usage Modify
67 remove :: [String] -> IO ()
68 remove argv = putStrLn $ usage Remove
70 search :: [String] -> IO ()
71 search argv = putStrLn $ usage Search
73 view :: [String] -> IO ()
74 view argv = putStrLn $ usage View
76 version :: IO ()
77 version = putStrLn $ progName ++ " " ++ progVersion
79 main :: IO ()
80 main = do
81 argv <- getArgs
82 let argv' = tail argv
83 case parseArgs argv of
84 Right Add -> add argv'
85 Right Bookmark -> bookmark argv'
86 Right Citation -> citation argv'
87 Right Help -> help argv'
88 Right Modify -> modify argv'
89 Right Remove -> remove argv'
90 Right Search -> search argv'
91 Right View -> view argv'
92 Right Version -> version
93 Left msg -> error msg