
Hi, When you create a record in haskell, it automatically generates gettor functions for accessing the record fields. It also provides you with a record update syntax: rec {field=val} but there is no settor function. It would be nice if there was some sort of section-like syntax to access the settor function, like: {field=} -- val rec {field=val} -- rec or even if there was a name for that function (such as field_settor). Without such a syntax, one often has to write lambdas like: \r v -> r {field=v} \r -> r {field=3} Consider for example an cmd line parser that collects flags in a record. Instead of writing: opt "l" (NoArg {c_loop=False}) "dont loop", opt "o" (optStr {c_out=} "dir") "output dir", opt "t" (optInt {c_maxtime=} "mins") "maximum time" we would have to write it out as: options = [ opt "l" (NoArg (\c -> c {c_loop=False})) "dont loop", opt "o" (optStr (\v c -> c {c_out=v}) "dir") "output dir", opt "t" (optInt (\v c -> c {c_maxtime=v}) "mins") "maximum time" ] where opt cs d s = Option cs [] d s optStr f name = ReqArg f name optInt f name = ReqArg (f . read) name getOptions :: String -> [String] -> IO Config getOptions prog argv = let header = "Usage: " ++ prog ++ " [OPTIONS...] files..." in let usage s = ioError (userError (s ++ "\n" ++ usageInfo header options)) in let (updates, files, errs) = getOpt2 options argv in let config = updates defConfig {c_files=files} in case () of _ | not (null errs) -> usage (concat errs) | null (c_files config) -> usage "no files specified" | otherwise -> return config Tim Newsham http://www.thenewsh.com/~newsham/