
Hi The CmdArgs manual might help: http://community.haskell.org/~ndm/darcs/cmdargs/cmdargs.htm
Seriously, cmdargs is *brilliant*. It's also magic (to me).
On this list, I'm uncertain whether "brilliant" is a warning or a recommendation, but "magic" is clearly irresistible, so I had a go at using cmdargs.
I'd describe cmdargs as referentially impure, but really concise.
And I agree, it is really nice in quickly and succintly getting command parsing up and working, and in that it most Works As Expected (tm). Some snags I ran into, which may (or may not) serve to improve documentation, and which may (or may not) result in some gentle guidande as to preferred solutions rising to the surface:
- The examples use 'def' a lot, and I mistakenly thought 'empty' would supply default values. Not so, replace 'def' with the default value and off you go. 'def' seems to be the "minimum" value for that particular type.
'def' is the default value, empty has a particular semantic meaning and serves to change the options. I should document this more carefully. Perhaps empty should be renamed 'optional', since that's what it does.
- As I wanted a single file argument, I tried to use 'args' in combination with a parameter of type FilePath. Apparently 'args' wants [FilePath] and appends command line arguments to the default value. I used 'error "no file bla bla"' as the default value, and appending to this didn't do much good, as you can imagine. So: use [FilePath] and check the length manually.
argPos 0 should do the trick.
- CmdArgs helpfully provides default --help, --version as well as --quite and --verbose. For the two former, there's also a nice default implementation, but presumably the latter two are for use in the program proper. Unfortunately, I don't know how to get at their values.
As you found later, isLoud etc do the job. CmdArgs is very much a 0.1 release. The documentation isn't polished, it does simple arguments nicely, but has flaws when you try and go more advanced. I want to spend some more time on it at some point. Thanks, Neil