
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