I\'m trying to use optparse-applicative to parse a Maybe String
but I can\'t find anywhere how to deal with Maybe
. The only thing I found is to add a d
See the following passage of the optparse-applicative README:
Parsers are instances of both
Applicative
andAlternative
, and work with any generic combinator, likemany
andsome
. For example, to make a option returnNothing
instead of failing when it's not supplied, you can use theoptional
combinator inControl.Applicative
:optional $ strOption ( long "output" <> metavar "DIRECTORY" )
Accordingly, all you have to do is apply the optional
combinator to the result of strOption
:
import Options.Applicative
data Config = Config
{ cIn :: Maybe String
, cOut :: Maybe String
} deriving Show
configParser :: Parser Config
configParser = Config
<$> (optional $ strOption $ long "in" <> short 'i')
<*> (optional $ strOption $ long "out" <> short 'o')
main :: IO ()
main = do
conf <- execParser (info configParser fullDesc)
print conf
Tests at the command line:
$ main --in foo -o bar
Config {cIn = Just "foo", cOut = Just "bar"}
$ main -i foo
Config {cIn = Just "foo", cOut = Nothing}