2012-04-09 9 views
2

Ich bin ein bisschen Problem mit dem Lesen Argumentwert in Haskell mit:Haskell Lesen args Wert

ich Optionen wie folgt deklariert ist:

options :: [OptDescr ArgFlag] 
options = [Option [] ["help"] (NoArg Help) "", 
      Option [] ["version"] (NoArg Version) "", 
      Option ['a'] [] (NoArg FSAll) "", 
      Option ['L'] [] (ReqArg FSLevel "NUM") ""] 

Und ich las die Argumente wie diese (I lesen kann, welches Argument ist aktiv):

main = do 
     args <- getArgs 
     case getOpt RequireOrder options args of 
      ([Version], [], []) -> do ... 

      ([Help], [], []) -> do ... 

      (flags, files, []) -> do ........ * 

      otherwise -> do ... 

Wo Zeichen ‚*‘ ist, ich brauche Flagge zu lesen Wert der möglichen ‚-l 3‘ -> ich über google gesucht, aber ich habe nichts gefunden (vielleicht falsches Keyword). Sie erkennen nur, ob das Argument überall aktiv ist, nicht seinen Wert.

Antwort

2

Ich nehme an, Sie

data ArgFlag = Help 
      | Version 
      | FSAll 
      | FSLevel String 

Mit einer Hilfsfunktion

unFSLevel :: ArgFlag -> Maybe String 
unFSLevel (FSLevel value) = Just value 
unFSLevel _    = Nothing 

definiert haben, können Sie dann den Wert wie diese:

case listToMaybe $ mapMaybe unFSLevel of 
    Just value -> -- code to handle the -L flag having this value 
    Nothing -> -- code to handle there not being an -L flag 

(Sie mapMaybe importieren müssen und listToMaybe von Data.Maybe.)

+0

Vielen Dank für die perfekte Antwort;). Klappt wunderbar! – ZarakiKenpachi