parseArguments :: forall a . (Generic a, HasDatatypeInfo a, All2 HasArguments (Code a)) =>
     String -- ^ Name of the program (e.g. from 'getProgName').
  -> [Modifier] -- ^ List of 'Modifier's to manually tweak the command line interface.
  -> [String] -- ^ List of command line arguments to parse (e.g. from 'getArgs').
  -> Result a
parseArguments progName mods args = do
  modifiers <- mkModifiers mods
  parser <- genericParser modifiers
  runParser progName modifiers
    (normalizeParser (applyModifiers modifiers parser)) args
parseArguments :: forall a . (Generic a, HasDatatypeInfo a, All2 HasArguments (Code a)) =>
     String -- ^ Name of the program (e.g. from 'getProgName').
  -> [Modifier] -- ^ List of 'Modifier's to manually tweak the command line interface.
  -> [String] -- ^ List of command line arguments to parse (e.g. from 'getArgs').
  -> Result a
parseArguments progName mods args = do
  modifiers <- mkModifiers mods
  parser <- genericParser modifiers
  runParser progName modifiers
    (normalizeParser (applyModifiers modifiers parser)) args
parseArguments progName mods args = do
  modifiers <- mkModifiers mods
  parser <- genericParser modifiers
  runParser progName modifiers
    (normalizeParser (applyModifiers modifiers parser)) args