假设我正在使用以下命令构建一个界面:
$ run --display (file/env/db) # default to file if invalid is entered
我具体寻找的是如何通过以下方式获取枚举值:
鉴于:
data type = File | Env | Db
当输入命令
run --display file
时,返回枚举File
。
据我所知,
strOption
和 strArgument
函数可用于任意字符串参数。我已阅读完整的文档,但无法找到任何简单的解决方案。任何帮助将不胜感激。
您可以使用自定义解析器,例如:
import Data.Char(toLower)
import Options.Applicative(ReadM, eitherReader)
data OutputType = File | Env | Db
parseOutputType :: ReadM OutputType
parseOutputType = eitherReader $ (go . map ToLower)
where go "file" = Right File
go "env" = Right Env
go "db" = Right Db
go _ = Left "Enter a valid option: file, env, or db"
然后用以下命令解析选项:
import Options.Applicative
data MyOptions = MyOptions { display :: OutputType }
parseOptions :: Parser MyOptions
parseOptions = MyOptions <$> option parseOutputType (long "display")