2012-04-09 57 views
2

我有一點問題,閱讀參數值在Haskell:哈斯克爾閱讀ARGS價值

我在聲明如下選項:

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

和我讀到這樣的論點(我可以讀取哪個參數是主動):

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

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

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

      otherwise -> do ... 

哪裏有「*」字符,我需要閱讀可能「-l 3」標誌的價值 - >我搜索通過谷歌,但我還沒有發現什麼(可能錯誤的關鍵字)。他們只是檢測論點是否到處都有效,而不是它的價值。

回答

2

我想您已經定義

data ArgFlag = Help 
      | Version 
      | FSAll 
      | FSLevel String 

在一名助手功能

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

那麼你就可以得到這樣的價值:

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 

(您將需要進口mapMaybelistToMaybe,從Data.Maybe。)

+0

非常感謝您的完美答案;)。奇蹟般有效! – ZarakiKenpachi 2012-04-09 12:31:19