
I've been using pesco_cmdline for a while now. But I did notice that
it doesn't fit my needs.. And it took me quite a while to get to know
why I was getting strange typeable errors when specifying the wrong
default value or reading the wrong type.. (these errors occur at
runtime thus they don't use haskells strength)
So I got another crazy idea. Why not see arguments as tokens and use a
parser such as parsec?
All you would have to do is creating some kind of syntax tree.
Consider an example application : mmewcde (my mega executable which can
do everything).
mmewcde edit <file>
mmewcde mv <file> <file>
mmewcde mv --target-dir <dest> <folder> <files>>
mmewcde cp <file> <file>
mmewcde cp --target-dir <dest> <folder> <files>>
mmewcde callsox <infile> <options> <outfile>
Why not something like tar?
mmewcde tar

Hi,
Have you seen: System.Console.GetOpt
http://www.haskell.org/ghc/docs/latest/html/libraries/base/System-Console-Ge...
Interestingly Hoogle doesn't seem to index it, but it does exist! (and
in fact Hoogle even uses it...)
Thanks
Neil
On 7/29/06, Marc Weber
I've been using pesco_cmdline for a while now. But I did notice that it doesn't fit my needs.. And it took me quite a while to get to know why I was getting strange typeable errors when specifying the wrong default value or reading the wrong type.. (these errors occur at runtime thus they don't use haskells strength)
So I got another crazy idea. Why not see arguments as tokens and use a parser such as parsec?
All you would have to do is creating some kind of syntax tree.
Consider an example application : mmewcde (my mega executable which can do everything).
mmewcde edit <file> mmewcde mv <file> <file> mmewcde mv --target-dir <dest> <folder> <files>> mmewcde cp <file> <file> mmewcde cp --target-dir <dest> <folder> <files>> mmewcde callsox <infile> <options> <outfile> Why not something like tar? mmewcde tar
* ..? Of cause I'll have to write the funtions edit :: String -> IO () mv :: String -> String -> IO () mvDest :: String -> [String] -> IO () ... ... which have to be called
Now I'd like to do this:
optionParser = many $ oneOf [ edit, mv, mvDest, cp, cpDest, callsox, tar] optionParserWithHelp = optionParser <|> printHelp
edit = do string "edit" file <- existingFilename launchEditor file
mv = [..] mvDest = do string mv string "--target-dir" td <- existingDirectory files <- many existingFilename map (movefile td) files
[...]
printHelp = do oneOf $ map string ["-h","--help","--usage"] prettyPrint optionParser
main = do args <- getArgs parseAndExecute optionParserWithHelp
prettyPrint might look like this (this will be unncommon ;)
mmewcde --help: many edit <exitingfile> or mv <exitingfile> <file> ....
Would this be nice? Does this already exist somehow?
perhaps many can even be made nongreedy so that you can specify more than one command at once mmewcde mv --target-dir d f1 f2 cp --target-dir d2 f3 f4 ...
Does this make sense? I think this would lead to self documenting well mantainable code.
Marc _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Marc Weber
-
Neil Mitchell