Как указать значение по умолчанию для параметра string в Options.Аппликативный

Как указать значение по умолчанию через strOption? The документация для библиотеки optparse-applicative не показывает, как создать значение по умолчанию для 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 ответов


цитируя readme:

анализаторы экземпляры аппликационной и альтернативных

что означает, что вы должны просто иметь возможность указать значения по умолчанию, как это:

someOption <|> pure "thisIsUsedIfSomeOptionWasn'tPassed"

вы можете создать комбинатор по умолчанию, как это

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

и использовать его так

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

Я был бы удивлен, если бы это не существовало уже в какой-то форме.


Это действительно существует, как value, хотя это довольно трудно найти в документации.

пример:

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