文档清楚地提到了使用'def',它为标志提供了一个默认值(空)
sample = Sample{hello = def &= help "World argument" &= opt "world"}
&= summary "Sample v1"
但是我找不到一种方法来提及我想强制要求该标志。
我真的应该去显式还是有什么方法可以在隐式中定义一个必需的标志?
文档清楚地提到了使用'def',它为标志提供了一个默认值(空)
sample = Sample{hello = def &= help "World argument" &= opt "world"}
&= summary "Sample v1"
但是我找不到一种方法来提及我想强制要求该标志。
我真的应该去显式还是有什么方法可以在隐式中定义一个必需的标志?
的文档opt
指出
请注意,CmdArgs 中的所有标志都是可选的,如果省略,将使用它们的默认值。
因此,似乎不可能使用隐式样式将标志定义为强制性的。
但是,您可以通过使用Maybe
值来检测标志的遗漏。例如
data Sample = Sample { hello :: Maybe String }
sample = Sample{hello = def &= help "World argument" &= opt "world"}
&= summary "Sample v1"
现在,如果省略该标志,您将获得 a Nothing
,如果用户提供了一个值,您将获得Just "value"
. 这意味着您可以自行检查Nothing
并以适当的错误消息终止。