[Haskell-cafe] GetOpt

Mirko Rahn rahn at ira.uka.de
Thu Apr 27 06:32:23 EDT 2006


Tomasz Zielonka wrote:
> On Thu, Apr 27, 2006 at 02:26:22AM +0300, Einar Karttunen wrote:

>>and handle options as functions from Config to Config:
>>
>>>Option ['i']   ["input"]   (ReqArg (\x c -> c { infile = Just x }) "file") "input file name"

> I find this approach very convenient, but I push it a bit further. Some
> time ago I wrote a small article about this:
> 
>     http://www.haskell.org/pipermail/haskell/2004-January/013412.html
> 
> I was not the first one to use the approach but I felt that it should be
> made more popular. Perhaps I should make a wiki page from it, but I seem
> to never do such things and can't promise to do it this time :-/

You are dealing with more convenient option handling, validating and 
defaulting on top of Sven Pannes famous GetOpt module. Nice stuff but 
there is another important point: Your approach still needs a central 
definition of an option list (or record) in the main (user) program. But 
suppose you write some libraries that are used by a couple of user 
programs. It becomes tedious and error prone to define the same lists of 
options with descriptions and validating functions in all user programs 
just to give it to the library. Moreover the user program in general 
even don't know about the right validating function or option description.

So it would be much better to define the options in the library and to 
provide this definitions to the user program somehow. I tought about 
this topic several times and came up with a solution that works for me 
but is far from being perfect. It uses existentials and a main 
disadvantage is the need of explicit traversing. Moreover some new 
boilerplate code is necessary.

You can find the interface in

http://liinwww.ira.uka.de/~rahn/src/Util/Option.hs

Sample library definitions of options are in

http://liinwww.ira.uka.de/~rahn/src/PCP/Fast/Env.hs
http://liinwww.ira.uka.de/~rahn/src/PCP/Fast/Description.hs

These definitions are combined in

http://liinwww.ira.uka.de/~rahn/src/PCP/Fast/Auto.hs

and finally used for example in the user programs

http://liinwww.ira.uka.de/~rahn/src/Prog/Eval.hs
http://liinwww.ira.uka.de/~rahn/src/Prog/Interesting.hs

Note, that the user programs just define options that are specific for 
the program, e.g. both programs have options to define some search 
bounds without definition.

As stated: Far from being perfect. Looking forward to get some new ideas!

Best regards, Mirko Rahn

-- 
-- Mirko Rahn -- Tel +49-721 608 7504 --
--- http://liinwww.ira.uka.de/~rahn/ ---


More information about the Haskell-Cafe mailing list