如何为Options.Applicative中的字符串选项提供默认值

时间:2014-03-07 18:21:33

标签: haskell

如何通过strOption指示默认值? documentation for the optparse-applicative library未显示如何为strOption创建默认值,例如

data Sample = Sample
  { hello :: String
  , quiet :: Bool }

sample :: Parser Sample
sample = Sample
     <$> strOption
         ( long "hello"
        <> metavar "TARGET"
        <> help "Target for the greeting" )
     <*> switch
         ( long "quiet"
        <> help "Whether to be quiet" )

虽然它确实显示了如何为标志选项提供默认值。例如,Normal

中的默认值
data Verbosity = Normal | Verbose

flag Normal Verbose
  ( long "verbose"
 <> short 'v'
 <> help "Enable verbose mode"

修改

我想我在value中的Options.Applicative.Builder修饰符中找到了答案。

2 个答案:

答案 0 :(得分:12)

这确实存在,如value,尽管在文档中很难找到。

示例:

strOption  ( long "some-opt"
          <> value "default value"
          <> metavar "SOMEOPT"
          <> help "an option demonstrating the use of `value'" )

答案 1 :(得分:5)

引用自述文件:

  
    

解析器是Applicative和Alternative

的实例   

这意味着你应该能够像这样指定默认值:

someOption <|> pure "thisIsUsedIfSomeOptionWasn'tPassed"

您可以像这样创建一个默认的组合器

 defaultValue :: Alternative f => a -> f a -> f a
 defaultValue = flip (<|>) . pure

并像这样使用

 optionWithDefault :: Parser String
 optionWithDefault = defaultValue "defaultValue" option

如果不是已经以某种形式存在,我会感到惊讶。