Esta es más una pregunta de estilo que un cómo.Haskell: Análisis de los argumentos de la línea de comando
Así que tengo un programa que necesita dos argumentos de línea de comandos: una cadena y un número entero.
he implementado de esta manera:
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
Aunque esto funciona, esta es la primera vez que realmente he utilizado argumentos de línea de comandos en Haskell, así que no estoy seguro de si se trata de una horrible y torpe forma ilegible de hacer lo que quiero.
Utilizando los patrones perezosos juego funciona, pero pude ver cómo podría ser mal visto por otros codificadores. Y el uso de lecturas para ver si obtuve un análisis exitoso definitivamente me resultó incómodo al escribirlo.
¿Hay una forma más idiomática de hacer esto?
Google es tu amigo! Aquí está un gran reportaje sobre argumentos de línea de comandos en Haskell: http://leiffrenzel.de/papers/commandline-options-in-haskell.html – Sanjamal
@Sanjamal: Eso no simplificar el análisis de los argumentos * * Sin embargo, solo opciones. – ehird
también puede soltar el enlace 'args' de un uso usando' LambdaCase' que le da 'getArgs >> = \ case ...' en lugar de 'args <- getArgs; case args of ... ' – rampion