是否可以使用System.Console.CmdArgs.Implicit定义必需的标志?

时间:2013-05-07 04:22:47

标签: haskell

文档清楚地提到了使用'def',它为标志

提供了一个默认值(空)
sample = Sample{hello = def &= help "World argument" &= opt "world"}
         &= summary "Sample v1"

但是我找不到提及我想要强制标志的方法。

我真的应该使用Explicit还是有办法在Implicit中定义一个必需的标志?

1 个答案:

答案 0 :(得分:8)

opt的文档说明了

  

请注意,CmdArgs中的所有标志都是可选的,如果省略则使用它们的默认值。

因此似乎无法使用隐式样式将标志定义为必需。

但是,您可以使用Maybe值检测遗漏标记。 E.g。

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

现在,如果省略该标志,则会得到Nothing,如果用户提供了值,则会得到Just "value"。这意味着您可以自己检查Nothing并以适当的错误消息终止。