fork download
  1. import Control.Monad
  2. import System
  3.  
  4. type Arg = (String, String)
  5. type Args = [Arg]
  6.  
  7. defaultArgs :: Args
  8. defaultArgs = [
  9. ("-inputXMLPath", "localization_client.txt"),
  10. ("-outputXMLPath", "locale"),
  11. ("-outputXMLName", "localization"),
  12. ("-packagePath", "")
  13. ]
  14.  
  15. parseArgs :: Args -> [String] -> (Args, [String])
  16. parseArgs defaults rawArgs = parse defaults rawArgs [] where
  17. parse args [] errs = (args, errs)
  18. parse args ( x:[]) errs = (args, ("Error: alone argument option " ++ x):errs)
  19. parse args (k:v:tl) errs = case tryReplace k v args of
  20. Just args -> parse args tl errs
  21. Nothing -> parse args tl (("Error: unknown option " ++ k):errs)
  22.  
  23. tryReplace :: String -> String -> Args -> Maybe Args
  24. tryReplace _ _ [] = Nothing
  25. tryReplace key val ((k, v):rest) = if key == k
  26. then Just ((key, val):rest)
  27. else case tryReplace key val rest of
  28. Just xs -> Just ((k, v):xs)
  29. Nothing -> Nothing
  30.  
  31. main = do
  32. rawArgs <- getArgs
  33. let (args, errs) = parseArgs defaultArgs rawArgs
  34. forM_ (reverse errs) putStrLn
  35. putStrLn "Parameters:"
  36. forM_ args $ \(arg, val) ->
  37. putStrLn (arg ++ " = " ++ val)
Success #stdin #stdout 0.01s 3556KB
stdin
Standard input is empty
stdout
Parameters:
-inputXMLPath = localization_client.txt
-outputXMLPath = locale
-outputXMLName = localization
-packagePath =