2013-05-07 45 views
7

文件明確提到使用「高清」,這爲標誌是否可以使用System.Console.CmdArgs.Implicit定義所需的標誌?

sample = Sample{hello = def &= help "World argument" &= opt "world"} 
     &= summary "Sample v1" 

默認值(空),但我不能找到一種方法來提,我想迫使該標誌是必要的。

我應該真的去顯式或有任何方法來定義在隱式所需的標誌?

+1

不是真的關於主題,但我也會看[optparse-applicative](http://hackage.haskell.org/package/optparse-applicative-0.5.2.1) - 我發現它使用起來更好一些。 – isturdy 2013-05-10 14:25:35

回答

8

opt的文檔指出

注意,在CmdArgs所有標誌都是可選的,如果省略將使用它們的默認值。

因此,似乎不可能使用隱式樣式將標誌定義爲強制性的。

但是,您可以通過使用Maybe值來檢測標誌的省略。例如。

data Sample = Sample { hello :: Maybe String } 
sample = Sample{hello = def &= help "World argument" &= opt "world"} 
    &= summary "Sample v1" 

現在,如果省略標誌,你會得到一個Nothing如果用戶提供了一個值,你會得到Just "value"。這意味着您可以自己檢查Nothing並終止並顯示相應的錯誤消息。

+1

這是故意的 - 控制檯應用程序通常不需要命名標誌,儘管您可能需要位置參數。 – 2013-05-13 21:19:36

+0

它完全有意義。沒有立即意識到,但現在你說,這很明顯。 – 2013-05-23 23:57:41

相關問題