Wenn ich die folgenden Arten und Parser:Haskell optparse-applicative: eine Liste der Datensätze Parsen, die mehrere Felder haben
data Mode =
Mode1
| Mode2
deriving (Show, Eq, Read)
data ThingINeedMulitpleOf =
Thing { _name :: String, _mode :: Mode }
deriving (Show, Eq)
thingParser :: Parser ThingINeedMulitpleOf
thingParser = Thing <$> strArgument (metavar "NAME")
<*> option auto (long "mode" <> metavar "MODE")
und ich bauen einen Parser auf folgende Weise:
data Config =
Config ThingINeedMulitpleOf ThingINeedMulitpleOf
deriving (Show, Eq)
loadConfig = execParser $ info (Config <$> thingParser <*> thingParser) fullDesc
dann kann ich my-exe Thing1 --mode Mode1 Thing2 --mode Mode2
erfolgreich parsen, aber das ist nur nützlich, wenn ich genau zwei Things
will. ich in Probleme laufen, wenn die Config
zu ändern versuchen nThing
s zu unterstützen, das heißt:
data Config =
Config [ThingINeedMulitpleOf]
deriving (Show, Eq)
loadConfig = execParser $ info (Config <$> many thingParser) fullDesc
aber ich kann jetzt nicht analysieren mehr my-exe Thing1 --mode Mode1 Thing2 --mode Mode2
, mir den Fehler Invalid argument 'Thing1'
geben Interessanterweise das funktioniert, wenn die nur ein Feld enthält.