[Haskell-cafe] CmdArgs non-flag arguments with newtypes

Michael Orlitzky michael at orlitzky.com
Wed Jul 24 03:01:00 CEST 2013

I ran into an issue wrapping a [String] in a newtype with CmdArgs.
You're supposed to be able to declare that a field contains a list of
non-flag arguments... this works fine:

  data Cfg = Cfg { <whatever flags>, usernames :: [String] }
  arg_spec = Cfg { <whatever flags>, usernames = def &= args }

If I now call my program with,

  ./foo --flag1 --flag2 arg1 arg2

then usernames = [ "arg1", "arg2" ] as desired. However, I need to wrap
usernames in a newtype for an unrelated reason:

  newtype Usernames = Usernames [String]

Now, CmdArgs unexpectedly drops the first non-flag argument. So,

  ./foo --flag1 --flag2 arg1 arg2

gives me usernames = [ "arg2" ]. Obviously not what I want! Has anyone
else run into this? Figured out a workaround?

More information about the Haskell-Cafe mailing list