2012-04-09 42 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