[Haskell-cafe] Re: Avoiding boilerplate retrieving GetOpt cmd line args

Stuart Cook scook0 at gmail.com
Fri Jul 27 03:58:29 EDT 2007

On 7/27/07, Eric Y. Kow <eric.kow at gmail.com> wrote:
> Solution #3 No lists, just records (lhs2TeX)
> ----------------------------------

> Advantages:
>   very convenient/compact; have to write
>     (i)   Flag type
>     (ii)  Settings record type/GetOpt in one go
>     (iii) default Settings
>   easy to lookup flags
> Disadvantages:
>   Not as flexible
>    - can't group flags into blocks and have different programs that use
>      different subsets of flags (without sharing the same Setting type)
>    - everything must go into Settings
>    - seems harder to say stuff like 'if flag X is set and flag Y are in
>      the list of Flags, then parameterise flag Z this way' or
>      'flags X and Y are mutually exclusive'

This is what I'm using for my current project. Most of the
disadvantages don't apply in my case, because all my flags are
largely-independent simulation parameters.

The one thing I find annoying, though, is that for each option I add,
I need to make changes in three places:

  1) The definition of my options record
  2) My default options value
  3) My list of GetOpt.OptDescr

What I'd really like to be able to do is specify the field name, field
type, and GetOpt info in a single place, without any redundancy. This
is obviously impossible in vanilla Haskell, so some kind of fancy
preprocessing or templating would be necessary. (Sadly, I'm not in a
position to pull this off right now.)


More information about the Haskell-Cafe mailing list