Ich benutze Options.Applicative
Haskell Befehlszeile, mein Plattentyp für die Option zu handhaben ist wie:Wie Mustervergleich in Haskell options.applicative für Datensatztyp?
data Options = Options { xml :: String
,eut :: String
} deriving (Show)
options :: Parser Options
options = Options
<$> strOption (short 'x'
<> long "xml"
<> metavar "XMLFILE"
<> value []
<> help "GCCXML file for parsing")
<*> strOption (short 'e'
<> long "eut"
<> metavar "PATH_2_EUT"
<> value []
<> help "EUT Json filepath for parsing")
Da ist in meinem Haskell Haupt-Code, ich habe:
main :: IO()
main = do
options <- execParser parseOpts
case options of
Options {xml = [], eut = []} -> putStrLn "use -h to print usage info"
-- xml option
Options {xml = _, eut = []} -> parseXML $ xml options
-- eut option
Options {xml = [], eut = _} -> genMeta $ eut options
-- no matching
_ -> putStrLn "use -h to print usage info"
where
parseOpts = info (helper <*> options)
(fullDesc
<> progDesc "Given GCCXML file, generate EUT json and test meta files"
<> header "map2meta - Generate test meta files")
Meine Absicht ist, die Verarbeitung entweder zu tun für "-x"
oder "-e"
. Ich erreiche dies, indem ich das Muster Options {xml = _, eut = []}
benutze, um den Fall anzupassen, dass die Befehlszeile "-x"
, aber keine "-e"
hat, während Options {xml = [], eut = _ }
dem Fall entspricht, dass die Befehlszeile "-e"
, aber keine "-x"
hat. Allerdings, wenn ich das Programm ohne Optionen ausführen, scheint es Options {xml = _ , eut = [] }
erhalten übereinzustimmen. Also fügte ich hinzu, um diesen Fall abzufangen. Ich denke, dass der Platzhalter '_' tatsächlich verwendet werden kann, um ein '[]' zu finden, obwohl ich hoffte, dass es nur zu 'etwas' anstelle einer leeren Zeichenfolge passen würde. Daher lautet meine erste Frage, wie man ein Muster erstellt, das einer nicht leeren Zeichenfolge entspricht.
Meine zweite Frage ist, wie Code hinzufügen, um die Nutzungsinformationen auszudrucken? Im Moment drucke ich es nur, wenn ich "-h"
benutze. Ich möchte es drucken, wenn keine Optionen in der Befehlszeile angegeben sind.