module Main where import Grocery.Data.Grocery import System.Environment( getArgs ) import System.Console.GetOpt import Data.Maybe( fromMaybe, isJust ) datafile = "util/resources/groceries-new" data AddOptions = AddOptions { optInStock :: Bool , optRecurrence :: Recurrence , optCategories :: [String] } deriving Show defaultAddOptions = AddOptions { optInStock = False , optRecurrence = Medium , optCategories = [] } split :: String -> [String] split "" = [] split s = let (l, s') = break (== ',') s in l : case s' of [] -> [] (_:s'') -> split s'' addOptions :: [OptDescr (AddOptions -> AddOptions)] addOptions = [ Option ['i'] ["inStock"] (NoArg (\opts -> opts { optInStock = True })) "Instock (default=False)" , Option ['r'] ["recurrence"] (ReqArg (\rec opts -> opts { optRecurrence = stringToRecurrence rec }) "high|med|low") "frequency item is needed" , Option ['c'] ["categories"] (ReqArg (\cat opts -> opts { optCategories = split cat }) "categories") "categories item belongs to" ] getAddOptions :: [String] -> IO (AddOptions, [String]) getAddOptions argv = case getOpt Permute addOptions argv of (o,n,[]) -> return (foldl (flip id) defaultAddOptions o, n) (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header addOptions)) where header = "Usage: grocery add [ ... ] " main = do (cmd:name:args) <- getArgs print cmd print name print args (parsedAddArgs, _) <- getAddOptions args print $ show parsedAddArgs -- groceries <- loadGroceryList datafile -- mapM_ print groceries