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

Chr*_*mer 7 haskell

文档清楚地提到了使用'def',它为标志提供了一个默认值(空)

sample = Sample{hello = def &= help "World argument" &= opt "world"}
         &= summary "Sample v1"
Run Code Online (Sandbox Code Playgroud)

但是我找不到一种方法可以提到我要强制要求标志.

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

sha*_*ang 8

对于文件opt规定,

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

所以似乎不可能使用隐式样式将标志定义为强制标志.

但是,您可以使用Maybe值来检测标记的省略.例如

data Sample = Sample { hello :: Maybe String }
sample = Sample{hello = def &= help "World argument" &= opt "world"}
     &= summary "Sample v1"
Run Code Online (Sandbox Code Playgroud)

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

  • 这是故意的 - 控制台应用程序通常不需要命名标志,尽管您可以要求位置参数. (2认同)