Haskell: Analyse d'arguments de ligne de commande

De cela plus d'un style de question, plutôt que d'un comment.

Donc j'ai un programme qui a besoin de deux arguments de ligne de commande: une chaîne de caractères et un entier.

J'ai mis en place cette façon:

main = do
  args@(~( aString : aInteger : [] ) ) <- getArgs
  let parsed@( ~[(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

Alors que cela fonctionne, c'est la première fois que j'ai vraiment utilisé en ligne de commande arguments en Haskell, donc je ne suis pas sûr de savoir si c'est un horriblement maladroit et illisible façon de faire ce que je veux.

À l'aide de paresseux filtrage fonctionne, mais j'ai pu voir comment il pourrait être mal perçu par d'autres programmeurs. Et l'utilisation du lit pour voir si j'ai eu un succès analyser certainement sentie mal à l'aise quand il faut l'écrire.

Est-il plus idiomatiques façon de le faire?

InformationsquelleAutor rampion | 2011-12-22