Questa è più una domanda di stile, piuttosto che un modo per farlo.Haskell: Parsing argomenti della riga di comando
Quindi ho un programma che richiede due argomenti della riga di comando: una stringa e un intero.
ho implementato in questo modo:
main = do
[email protected](~(aString : aInteger : [])) <- getArgs
let [email protected](~[(n,_)]) = reads aInteger
if length args /= 2 || L.null parsed
then do
name <- getProgName
hPutStrLn stderr $ "usage: " ++ name ++ " <string> <integer>"
exitFailure
else do
doStuffWith aString n
Anche se questo funziona, questa è la prima volta che ho veramente usato argomenti della riga di comando in Haskell, quindi non sono sicuro se questo è un terribilmente scomodo e modo illeggibile di fare ciò che voglio.
L'utilizzo della corrispondenza di pattern pigro funziona, ma ho potuto vedere come potrebbe essere disapprovato da altri codificatori. E l'uso delle letture per vedere se ho avuto un parse di successo mi sono sentito davvero imbarazzante quando lo scrivo.
Esiste un modo più idiomatico per fare ciò?
Google è tuo amico! Ecco un ottimo articolo sugli argomenti della riga di comando in Haskell: http://leiffrenzel.de/papers/commandline-options-in-haskell.html – Sanjamal
@Sanjamal: Ciò non semplifica l'analisi di * argomenti *, tuttavia, solo opzioni. – ehird
è anche possibile eliminare l'associazione 'args' utilizzando'CaldaCase' dando 'getArgs >> = \ case ...' invece di 'args <- getArgs; case args di ... ' – rampion