getOpt return record of type a rather than [a]

Henning Thielemann lemming at henning-thielemann.de
Tue Dec 18 17:10:58 EST 2007


The current version of System.Console.GetOpt.getOpt returns a list of
values, where the element type has usually one constructor per option.
 data Flag
     = Verbose | Version
     | Input String | Output String | LibDir String

What I more like to receive is a record consisting of one constructor and
many fields, where optional options are of type Maybe, options with
multiple occurrence are of type list.

 data Flag = Flag {
      verbose :: Bool,
      version :: Bool,
      input  :: Maybe FilePath,
      output :: Maybe FilePath,
      libdir :: FilePath
    }

Then we would need

data ArgDescr a =
  NoArg (a -> a)
  ReqArg (String -> a -> a) String
  OptArg (String -> a -> a) String

e.g.

OptArg (\path flags -> flags {input = Just path}) "FILE"



I feel this approach is so natural, that someone must have implemented it
already.


More information about the Libraries mailing list