Stefan O'Rear | 18 Dec 23:21
Picon
Gravatar

Re: getOpt return record of type a rather than [a]

On Tue, Dec 18, 2007 at 11:10:58PM +0100, Henning Thielemann wrote:
> 
> 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.

The approach you describe is quite possible with the current GetOpt,
just apply (foldr ($) initialValue) to the return value, and allow a to
be instantiated with a function type.

Stefan
_______________________________________________
Libraries mailing list
Libraries <at> haskell.org
http://www.haskell.org/mailman/listinfo/libraries

Gmane